java基础--IO体系总结

IO体系总结

1.分类

  • 按照流向分为输入流和输出流
  • 按照操作单元分为字节流和字符流
  • 按照角色分为结点流和处理流
    • 可以从/向特定IO设备(如磁盘、网络)读/写数据的流称为节点流。节点流也被称为低级流,当使用节点流进行输入和输出时,程序直接连接到实际的数据源,和实际输入/输出节点连接。
    • 处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。处理流也被称为高级流

当·使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,没有和实际的输入和输出节点连接。使用处理流一个明显的好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输入代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据源也相应的发生变化

2.结构

20200909163158335

3.常用流分类表

分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputStream OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
访问字符串 StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流 InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream
抽象基类 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流 PrintStream PrintWriter
推回输入流 PushbackInputStream PushbackReader
特殊流 DataInputStream DataOutputStream

4.常用方法

InputStream和Reader的常用方法


  • void mark(int readAheadLimit); 在记录指针当前位置记录一个标记
  • boolean markSupported(); 判断此输入流是否自持mark()操作,即是否支持记录标记
  • void reset(); 将此流的记录指针重新定位到上一次标记(mark的位置)
  • long skip(long n); 记录指针向前移动n个字节/字符

OutputStream和Writer的常用方法


  • void write(int c); 将指定的字节/字符输出到输出流中,其中c即可以代表字节,也可以代表字符
  • void write(byte[]/char[] buf); 将字节数组/字符数组中的数据输出到指定输出流中
  • void write(byte[]/char[] buf,int off,int len); 将字节数组/字符数组从off位置开始,长度为len的字节/字符输出到输出流中

5.使用

字节输入流输出流

public class FileOutputStreamTest {
    public  static void main(String[] args)throws IOException {
        FileInputStream fis=null;
        FileOutputStream fos=null;
        try {
            //创建字节输入流
            fis=new FileInputStream("文件路径");
            //创建字节输出流
            fos=new FileOutputStream("文件路径");

            byte[] b=new byte[1024];
            int hasRead=0;

            //循环从输入流中取出数据
            while((hasRead=fis.read(b))>0){
                //每读取一次,即写入文件输入流,读了多少,就写多少。
                fos.write(b,0,hasRead);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            fis.close();
            fos.close();
        }
    }
}

转换流的使用

public class InputStreamReaderTest {
    public  static void main(String[] args)throws IOException {
        try {
            // 将System.in对象转化为Reader对象
            InputStreamReader reader=new InputStreamReader(System.in);
            //将普通的Reader包装成BufferedReader
            BufferedReader bufferedReader=new BufferedReader(reader);
           String buffer=null;
           while ((buffer=bufferedReader.readLine())!=null){
            // 如果读取到的字符串为“exit”,则程序退出
               if(buffer.equals("exit")){
                   System.exit(1);
               }
               //打印读取的内容
               System.out.print("输入内容:"+buffer);
           }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
        }
    }
}

转换流的使用

public class InputStreamReaderTest {
    public  static void main(String[] args)throws IOException {
        try {
            // 将System.in对象转化为Reader对象
            InputStreamReader reader=new InputStreamReader(System.in);
            //将普通的Reader包装成BufferedReader
            BufferedReader bufferedReader=new BufferedReader(reader);
           String buffer=null;
           while ((buffer=bufferedReader.readLine())!=null){
            // 如果读取到的字符串为“exit”,则程序退出
               if(buffer.equals("exit")){
                   System.exit(1);
               }
               //打印读取的内容
               System.out.print("输入内容:"+buffer);
           }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
        }
    }
}
posted @ 2021-02-18 20:51  路口上  阅读(76)  评论(0)    收藏  举报