请看看我这个上传文件,为什么上传后的文件比上传前要大呢,我的文件是2.2兆,上传后变成2.9兆了,我的jdk是1.6版本,请高手看看啊,谢谢
 
 byte[] buffer = new byte[1024000];
        BufferedInputStream bufferedInputStream = new BufferedInputStream(file.getInputStream());
//        bufferedInputStream.available()
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(pathandname));        while (bufferedInputStream.read(buffer) != -1) {
            bufferedOutputStream.write(buffer);
        }        bufferedOutputStream.flush();
        bufferedOutputStream.close();
        bufferedInputStream.close();  

解决方案 »

  1.   


    int k = 0;
            while ((k = bufferedInputStream.read(buffer)) != -1) {
                bufferedOutputStream.write(buffer,0,k);
            }
      

  2.   

    你能保证最后一次能把buff数组填满么?如果填不满,write出去的却是整个数组,当然多数据了.应该把每次的取得长度记录,写的时候按读取长度write
      

  3.   

    byte[] buffer = new byte[1024000];
    每次读取的长度都是1024000,换成byte[] buffer = new byte[128];差距会小很多。
      

  4.   

    void write(byte[] b, int off, int len)
    将指定byte数组中从偏移量off开始的len个字节写入此缓冲的输出流。1楼已经给出了解决办法了,因为你无法保证最后一次是否能读满数组,所以需要获取读取的个数,并且设置写入的偏移量和个数
    偏移量自然为0,因为从数组的头开始,而个数就是read的返回值
      

  5.   

    这个可能是java自己存储的需要更多的空间,封装了存储空间的一些东西,不必要深究
      

  6.   

    int k = 0;
            while ((k = bufferedInputStream.read(buffer)) != -1) {
                bufferedOutputStream.write(buffer,0,k);
            }试试一楼给的代码
      

  7.   

    xie xie ge wei,thank you very much