IO流学习总结

来源:互联网 发布:济南程序员兼职平台 编辑:程序博客网 时间:2024/05/22 04:56

流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,IO 流根据处理类型的不同可分为字节流和字符流

二、字节流和字符流的区别:
字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在 UTF-8 码表中是 3 个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如图片。视频等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流。

三、IO 体系,所具备的基本功能就是读和写:
1.字符流
|-- Reader(读)
|-- Writer(写)
Reader
|--InputStreamReader :转换流,用于将字节流以指定的编码方式(默认gbk)转换为字符流读取
|--FileReader:用于处理文件的字符读取流对象
Writer
|--OutputStreamWriter :转换流,用于将字节流以指定的编码方式(默认gbk)转换为字符流写入
|--FileWriter:用于处理文件的字符写入流对象
其实很容易就可以看出来,IO 体系中的子类名后缀绝大部分是父类名称,而前缀则是体现子
类特有功能的名称。

用于写的流一般都有缓存区,可以调用flush直接将流刷到缓存区,一般不用自己调用,在流close的时候会自动调用一次。

 

public class Test {
 
 public static void main(String[] args) throws Exception {
  
  //commonReader()
  
  //lenReader();
  //bufferReader();
  //streamReader();
  copyPicture();
 }
 
 public static void copyPicture() throws Exception{
  InputStream is = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\QQ截图20160330155959.png"));
  BufferedInputStream bis = new BufferedInputStream(is);
  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\QQ截图副本.png"));
  byte [] b = new byte[1024];
  while(bis.read(b)!=-1){
   bos.write(b);
   bos.flush();
  }
  bis.close();
  
  bos.close();
 }
 //读取乱码解决,读取字节流,按指定编码转换为字符流
 public static void streamReader() throws Exception {
  InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\test.txt")),"gbk");
//  char[] buf = new char[512];
//  int c=0;
//  while((c=isr.read(buf)) != -1){
//   System.out.println(new String(buf,0,c)+"*********");
//  }
  FileWriter writer = new FileWriter("C:\\Users\\Administrator\\Desktop\\test1.txt",true);
  BufferedWriter bw = new BufferedWriter(writer);
  BufferedReader bf = new BufferedReader(isr);
  String line = "";
  while((line = bf.readLine()) != null){
   bw.write(line);
   bw.newLine();
  }
  
  //writer.flush();
  //writer.close();
  bw.flush();
  bw.close();
  isr.close();
 }
 public static void bufferReader() throws Exception{
  BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\test.txt"));
  String line = "";
  while((line = bf.readLine()) != null){
   System.out.println(line);
  }
  bf.close();
 }
 
 public static void commonReader() throws Exception{
  Reader reader = new FileReader("C:\\Users\\Administrator\\Desktop\\test.txt");
  int chx;
  while((chx = reader.read()) != -1){
   System.out.println((char)chx);
  }
  reader.close();
 }
 
 public static void lenReader() throws Exception{
  char [] buf = new char[1024];
  int len = 0;
  Reader reader2 = new FileReader("C:\\Users\\Administrator\\Desktop\\test.txt");
  while((len = reader2.read(buf)) != -1){
   System.out.println(new String(buf, 0, len)+"*****************");
  }
  reader2.close();
 }
}

0 0