小弟,新手自学java基础,为什么拷贝完大小不一样?

正在路上___ 发布于 2016/02/11 13:43
阅读 646
收藏 0

import java.io.*;
class  CopyDemo
{
     public static void main(String[] args)
     {
          System.out.println("Hello World!");
       
          method_2();
     }

 //拷贝一个mp3文件
    public static void method_2()
    {
          FileInputStream fi= null;
          FileOutputStream fo= null;
          try
          {
               fi = new FileInputStream("积木.mp3");
               fo = new FileOutputStream("积木_copy.mp3");
               BufferedReader br = new BufferedReader(new InputStreamReader(fi));
               BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));
               String len = null;
               while((len = br.readLine())!=null)
               {
                    bw.write(len);
                    bw.newLine();
                    bw.flush();
               }

          }


          catch (IOException e)
          {
               throw new RuntimeException("读写失败");
          }


          finally
          {
               try
               {
                    if(fi!=null);
                    fi.close();
               }
               catch (IOException e)
               {
                   throw new RuntimeException("读入失败");
               }


               try
               {
                    if(fo!=null);
                    fo.close();
               }
               catch (IOException e)
               {
                   throw new RuntimeException("写入失败");
               }
  
          }

 
     }

}

 

加载中
0
魔仙剑痴
你这是强制添加换行符了,不要按文本拷贝,要按二进制拷贝。
0
_eric
_eric
使用二进制字节拷贝
0
Mr_Eason
Mr_Eason

你使用的是字符流,如果是txt文本的话,是完全没有问题的

请记住,不要使用字符流操作非字符文件数据,如果你要拷贝其它类型的文件,使用字节流(二进制)来拷贝,这样永远不会发生错误.

字节流也是可以设置的读取多个字节的,in是读,out是写,下面代码你可以参考

byte[] b = new byte[1024//这个值设可以设置的],

int len = 0;

while((len=in.read(b))!=-1){

    out.write(b,0,len);

}


0
啦啦啦拉拉
啦啦啦拉拉
当成UTF8解码,然后又编码?
返回顶部
顶部