Java-字符与字节的区别
2016-05-27 20:47
471 查看
用字符流来拷贝声音和图片等二进制文件,会失真!而字符流不会
如果确实是文本文件,用字符流拷贝更好(不会失真且速度更快)。但如果不确定是否是纯文本,则用字节流较好
音乐文件复制:
如果确实是文本文件,用字符流拷贝更好(不会失真且速度更快)。但如果不确定是否是纯文本,则用字节流较好
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class bufferedReader { public static void main(String[] args) { // copyFileBuffer(); // copyMp3(); //ASCII GB2312 GBK FileCopyMp3(); } //二进制文件必须采用字节流 private static void FileCopyMp3() { //文件复制,从一个文件读出,写到另一个文件中 String dir1="c:\\"; String dir2="c:\\b\\"; String fileName="a.mp3"; FileInputStream in=null; FileOutputStream out =null; try { in= new FileInputStream(dir1+fileName); out =new FileOutputStream(dir2+fileName); byte buf[]=new byte[512]; int len=-1; while((len=in.read(buf))!=-1){ out.write(buf,0,len);//读了多少写多少 } in.close(); out.close(); } catch (IOException e) { e.printStackTrace();//文件找不到抛异常 }finally{//能把数据关闭 try { if(in!=null){ in.close(); } if(out!=null){ out.close(); } } catch (IOException e) { throw new RuntimeException("文件关闭失败,数据可能关闭失败"); } } } //字符流。 private static void copyMp3() { FileReader fr=null; FileWriter fw=null; char buf[]=new char[20]; try { fr=new FileReader("c:\\a.mp3"); fw=new FileWriter("c:\\b.mp3"); int len=-1; while((len=fr.read(buf))!=-1){ fw.write(buf,0,len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(fr!=null){ fr.close(); } if(fw!=null){ fw.close(); } } catch (IOException e) { throw new RuntimeException("file cant close"); } } } //字符流。字节缓冲:一次读一个字节太慢,字符流快一点 private static void copyFileBuffer() { try { BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt")); BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\c.txt")); String line=null; while((line=br.readLine())!=null){ bw.write(line); //写入换行符的方法 bw.newLine();//1。向文件写入一个换行符,仅适用于BufferedWriter // bw.write(System.getProperty("line.separator"));//2。兼容两种 // bw.write("\r\n");//3。wodows // bw.write("\n");//3.linux } br.close(); bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
音乐文件复制:
相关文章推荐
- Java创建多线程
- leakCanary 在eclipse使用
- 两个分数相加(结果最简)
- Spring BeanFactory
- 成为Java高手的25个学习要点
- 深入理解java异常处理机制(转)
- java.lang.UnsupportedClassVersionError: xxx/xxxClass : Unsupported major.minor version 51.0【转】
- MySql MESSAGE: java.net.ConnectException: Connection refuse
- Java动态绑定
- Java中的缓冲区(直接缓冲区、非直接缓冲区等)
- java30天速成方法
- Java学习笔记之工厂模式
- java 中null的判断
- Java学习笔记之适配器模式
- Java设计模式总结
- 在myeclipse拷贝项目时候经常遇到的问题
- JAVA学习(11) 反射
- 【java】线程安全的整型类AtomicInteger
- Java设计模式(六):适配器模式Adapter
- Java transient关键字使用