JAVA之常用集合

在java中,可以从中读入一个字节序列的对象叫做输入流,而可以向其中下入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地通常是文件,但也可以是网络连接,甚至是内存块。

其他编程语言的流类库的缓冲机制和预览细节等都是自动处理的。Java需要将多个流过滤器组合以构建真正有用的流序列能力,它有极大的灵活性。

缓冲区的作用是在输入流、输出流在写入写出时,不会每次都对设备进行访问。当缓冲区为空时,会读入新的数据块;当缓冲区满或被Flush时,数据被写出。

    字节流可以处理所有类型数据,如图片、视频等;字符流只能处理纯文本

读取操作

1、Reader

(1)BufferedReader

从字符流中读取文本,缓冲各个字符,实现高效率读取。一般包装FileReader、InputStreamReader等read开销高的类,若没有缓冲区,则read操作会读取字节并转换字符返回,效率低效。缓冲区的大小可以指定,但一般默认够用。

(2)InputSreamReader

是字节流通向字符流的桥梁,read方法在底层输入流中转换一个或多个字节,要想实现有效的转换,外层需套上BufferedReader。它可以指定字符集,否则使用平台默认字符集。

(3)FileReader

用来读取字符文件。

2、InputStream

(1)从文件中读取原始字节流,可以使文本、图像、视频等格式。

(2)BufferedInputStream

继承FilterInputStream,提供缓冲输入流功能,在创建BufferedInputStream时,会创建一个内部缓冲数组,默认为8M。与FileInputStream相比,同样的read方法,执行效率却更快。

读取操作用例

 1 import java.io.BufferedInputStream;
 2 import java.io.BufferedReader;
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.InputStreamReader;
 9 
10 public class IO读取用例 {
11 
12     public static void main(String[] args) throws IOException {
13         // TODO Auto-generated method stub
14 
15         BufferedReader br=null;        
16         BufferedInputStream bis=null;
17         try {
18             //字符流            
19             //读取字符流时,只有BufferedReader拥有ReadLine()方法
20             //方式一:直接读取
21             FileReader fr=new FileReader("test.txt"); //2848KB
22             br=new BufferedReader(fr);        
23             
24             long t=System.currentTimeMillis();
25             if(br.ready()){
26                 while((br.readLine())!=null){
27                     //TODO:
28                 }
29             }
30             t=System.currentTimeMillis()-t;
31             
32             System.out.println("FileReader用时"+t);//50s
33             
34             //方式二:原始字节流转换读取
35             InputStream in=new FileInputStream("test.txt");
36             InputStreamReader isr=new InputStreamReader(in); //转换
37             br=new BufferedReader(isr);
38             
39             long t2=System.currentTimeMillis();
40             if(br.ready()){
41                 while((br.readLine())!=null){
42                     //TODO:
43                 }
44             }
45             t2=System.currentTimeMillis()-t2; 
46             
47             System.out.println("FileInputStream用时"+t2); //28s
48             
49             //字节流
50             //方式一:流直接读取
51             InputStream fis=new FileInputStream("test.txt");
52             byte[] b=new byte[1024]; //存储读取数组
53             
54             long t3=System.currentTimeMillis();
55             if(fis.available()>0){                
56                 while((fis.read(b))!=-1){
57                     //TODO:
58                 }
59             }
60             t3=System.currentTimeMillis()-t3; 
61             System.out.println("BufferedInputStream用时"+t3);//6s
62             
63             //方式二:流套上buffered缓冲读取
64             bis=new BufferedInputStream(new FileInputStream("test.txt"));
65             b=new byte[1024]; 
66             
67             long t4=System.currentTimeMillis();
68             if(bis.available()>0){                
69                 while((bis.read(b))!=-1){
70                     //TODO:
71                 }
72             }
73             t4=System.currentTimeMillis()-t4; 
74             System.out.println("BufferedInputStream用时"+t4);//3s
75             
76         } catch (FileNotFoundException e) {            
77             e.printStackTrace();
78         } finally{
79             br.close();
80             bis.close();
81         }
82         
83     }
84 
85 }

写入操作

1、Writer

(1)BufferedWriter

写入字符输出流,缓冲字符。利用缓冲的包装,可以实现高效率的写入。

(2)OutputStreamWriter

是写入流中字符向字节转换的桥梁

(3)FileWriter

用于写入已过滤的字符流的抽象类

2、OutputStream

 (1)FileOutputStream

文件输出流是用于将图像数据之类的原始字节流写入File或FileDescriptor的输出流。而字符流一般使用FileWriter

(2)BufferedOutputStream

缓冲的输出流

写入操作用例

  1 import java.io.BufferedInputStream;
  2 import java.io.BufferedOutputStream;
  3 import java.io.BufferedReader;
  4 import java.io.BufferedWriter;
  5 import java.io.FileInputStream;
  6 import java.io.FileNotFoundException;
  7 import java.io.FileOutputStream;
  8 import java.io.FileReader;
  9 import java.io.FileWriter;
 10 import java.io.IOException;
 11 import java.io.OutputStreamWriter;
 12 
 13 public class IO写入用例 {
 14 
 15     public static void main(String[] args) throws IOException {
 16         
 17         BufferedReader br=null;        
 18         BufferedInputStream bis=null;
 19         
 20         BufferedWriter bw=null;
 21         BufferedOutputStream bos=null;
 22         try {
 23             FileReader fr=new FileReader("read.txt"); //51,420KB
 24             br=new BufferedReader(fr);
 25             String line;
 26             //文本同条件写入
 27             
 28             //方式一    :FileWriter直接写入        
 29             FileWriter fw=new FileWriter("write.txt");
 30             
 31             long t=System.currentTimeMillis();            
 32             if(br.ready()){
 33                 while((line=br.readLine())!=null){
 34                     //TODO:
 35                     fw.write(line);
 36                 }
 37             }
 38             t=System.currentTimeMillis()-t;
 39             
 40             System.out.println("BufferedWriter用时"+t);//910s
 41             
 42             //方式二    :BufferedWriter缓冲包装        
 43             br=new BufferedReader(fr);
 44             bw=new BufferedWriter(new FileWriter("write.txt"));
 45             
 46             long t2=System.currentTimeMillis();
 47             if(br.ready()){
 48                 while((line=br.readLine())!=null){
 49                     //TODO:
 50                     bw.write(line);
 51                 }
 52             }
 53             t2=System.currentTimeMillis()-t2; 
 54             
 55             System.out.println("BufferedWriter用时"+t2); //0s
 56             
 57             //方式三:原始字节流转换写入
 58             br=new BufferedReader(fr);
 59             bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("write.txt")));
 60             
 61             long t3=System.currentTimeMillis();
 62             if(br.ready()){
 63                 while((line=br.readLine())!=null){
 64                     //TODO:
 65                     bw.write(line);
 66                 }
 67             }
 68             t3=System.currentTimeMillis()-t3; 
 69             
 70             System.out.println("BufferedWriter用时"+t3); //0s
 71             
 72             //字节流
 73             
 74             //方式一:流直接写入
 75             bis=new BufferedInputStream(new FileInputStream("read.txt"));
 76             FileOutputStream fos=new FileOutputStream("write");
 77             byte[] b=new byte[10*1024];
 78             
 79             long t4=System.currentTimeMillis();
 80             if(bis.available()>0){                
 81                 while((bis.read(b))!=-1){
 82                     //TODO:
 83                     fos.write(b);
 84                 }
 85             }
 86             t4=System.currentTimeMillis()-t4; 
 87             
 88             System.out.println("InputStream用时"+t4); //143s
 89             
 90             //方式二:流套上缓冲写入
 91             bis=new BufferedInputStream(new FileInputStream("read.txt"));
 92             b=new byte[10*1024]; //存储读取数组
 93             bos=new BufferedOutputStream(new FileOutputStream("write.txt"));
 94                         
 95             long t5=System.currentTimeMillis();
 96             if(bis.available()>0){                
 97                 while((bis.read(b))!=-1){
 98                     //TODO:
 99                     bos.write(b);
100                 }
101             }
102             t5=System.currentTimeMillis()-t5; 
103             
104             System.out.println("InputStream用时"+t5); //137s
105             
106         } catch (FileNotFoundException e) {            
107             e.printStackTrace();
108         } finally{
109             br.close();
110             bis.close();            
111             bw.close();
112             bos.close();
113         }
114         
115 
116     }
117 
118 }

猜你喜欢

转载自www.cnblogs.com/tomZhu/p/9377716.html