标签:
参考:http://blog.csdn.net/ilibaba/article/details/3955799
Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用):
这里有详细介绍:Java的IO输入输出流类的介绍(有图)
FileInputStream, FileOutputStream, (字节流)
FileReader, FileWriter(字符流)
ByteArrayInputStream, ByteArrayOutputStream( 字节流 )
CharArrayReader, CharArrayWriter( 字符流 )
StringBufferInputStream,StringBufferOuputStream(字节流)
StringReader, StringWriter( 字符流 )
InputStream, OutputStream,( 字节流 )
Reader, Writer( 字符流 )
PrintStream(只能字节流), PrintWriter(字节流和字符流)
BufferedInputStream, BufferedOutputStream,( 字节流 )
BufferedReader, BufferedWriter( 字符流 )
InputStream, OutputStream 及其所有带 Stream 结束的子类
Reader, Writer 及其所有带 Reader, Writer 的子类
InputStreamReader, OutputStreamWriter
ObjectInputStream, ObjectOutputStream
PipeInputStream, PipeOutputStream,(字节流)
PipeReader, PipeWriter(字符流)
SequenceInputStream
PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
******************使用原则的步骤*************************************
决定使用哪个类以及它的构造方法的一般准则如下(不考虑特殊需要):
原则四(是二进制文件还是纯文本,直接决定使用字节流还是字符流)
原则六第 1 点(字节转字符,字符转字节)
原则一(颗粒:基本单位,是文件,字节数组/字符数组,String,Object)
原则三 (特别注明:一定要注意的是 readLine() 是否有定义,有什么比 read, write 更特殊的输入或输出方法,通常多建议使用,可以提高效率
普通的InputStream/OutputStream或者Reader/Writer都没有定义readLine()方法,也就是不能直接在控制台输出字符串,
而Buffered缓冲流中有定义readLine(),不过不能自动换行,需要newLine()手动生成;而PrintStream和PrintWriter有println()方法)
原则二(PrintStream,PrintWriter)
**********************几个例子**********************************
1 package iotest; 2 3 import java.io.*; 4 import java.util.*; 5 /** 6 * Java复制文件的简单例子 7 * */ 8 public class CopyWithoutBuffer { 9 public static void main(String[] args){ 10 long start = System.currentTimeMillis(); 11 System.out.println("begin copy...."); 12 try { 13 FileInputStream fis = new FileInputStream("E:\\12.mp4"); 14 FileOutputStream fos = new FileOutputStream("E:\\123.mp4"); 15 //这里使用了缓冲流,使用可以提高效率 16 BufferedInputStream bis = new BufferedInputStream(fis); 17 BufferedOutputStream bos = new BufferedOutputStream(fos); 18 try { 19 byte[] buf = new byte[1024]; 20 ////使用buffer 21 int read = bis.read(buf); 22 while(read!=-1){ 23 bos.write(buf,0,read);//因为buf读到最后可能不满,所以要以read为准 24 read = bis.read(buf); 25 } 26 27 // //不使用buff,并不使用byte数组,效率低很多,耗时大 28 // int read = bis.read();//一次读取一个字节 29 // while(read!=-1){ 30 // bos.write(read); 31 // read = bis.read(); 32 // } 33 bos.close(); 34 fos.close(); 35 bis.close(); 36 fis.close(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 41 } catch (FileNotFoundException e) { 42 e.printStackTrace(); 43 } 44 45 long end = System.currentTimeMillis(); 46 System.out.println("Copy Complete,use times:"+(end-start)+" ms"); 47 } 48 49 }
1 package iotest; 2 3 import java.io.*; 4 5 public class IOReaderTest { 6 public static void main(String[] args) { 7 System.out.println("开始"); 8 long start = System.currentTimeMillis(); 9 try { 10 FileReader fr = new FileReader("e:\\123.txt"); 11 FileWriter fw = new FileWriter("e:\\123456.txt"); 12 /* 13 BufferedReader br = new BufferedReader(fr); 14 String abc = br.readLine();//BufferedReader才定义了readLine()方法 15 //如果要换行,需要br.newLine()手动生成 16 System.out.println(abc); 17 */ 18 int read = fr.read(); 19 while(read!=-1){ 20 fw.write(read); 21 read = fr.read(); 22 } 23 fw.close(); 24 fr.close(); 25 long end = System.currentTimeMillis(); 26 System.out.println("耗时:"+(end-start)+" ms"); 27 } catch (FileNotFoundException e) { 28 e.printStackTrace(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 33 } 34 35 }
标签:
原文地址:http://www.cnblogs.com/tommy-huang/p/4322589.html