java-InputStream与OutputStream类型

来源:互联网 发布:netbeans怎么编写java 编辑:程序博客网 时间:2024/06/04 06:37

1.InputStream类型

InputStream的作用是用来表示那些从不同数据源产生输入的类 。包含的类型如下表所示:

类 功能 构造器参数 如何使用 ByteArrayInputStream 允许将内存的缓冲区当作InputStream使用 缓冲区,字节将从中取出 作为一种数据源:将其与FilterInputStream对象相连以提供有用接口 StringBufferInputStream 将String转换成InputStream 字符串。底层实现实际使用StringBuffer 作为一种数据源:将其与FilterInputStream对象相连以提供有用接口 FileInputStream 用于从文件读取信息 字符串,表示文件名、文件或FileDescriptor对象 PipedInputStream 产生用于写入相关PipedOutputStream的数据。实现“管道化”概念 PipedOutputStream 作为多线程中的数据源:将其与FilterInputStream对象相连以提供有用接口 SequenceInputStream 将两个或多个InputStream对象转换成单一InputStream 两个InputStream对象或一个容纳InputStream对象的容器Enumeration 作为一种数据源:将其与FilterInputStream对象相连以提供有用接口 FilterInputStream 抽象类,作为“装饰器”的接口。其中,“装饰器”为其他的InputStream类提供有用功能。

2.OutputStream类型

该类别的类决定了输出所要去往的目标:字节数组(但不是String)、文件或管道包含的类型如下表所示:

类 功能 构造器参数 如何使用 ByteArrayOutputStream 在内存中创建缓冲区。所有送往“流”的数据都要放置在此缓冲区 缓冲区初始化尺寸(可选的) 用于指定数据的目的地:将其与FilterOutputStream对象相连以提供有用接口 FileOutputStream 用于将信息写至文件 字符串,表示文件名、文件或者FileDescriptor对象 指定数据的目的地:将其与FilterOutputStream对象相连以提供有用接口 PipedOutputStream 任何写入其中的信息都会自动作为相关PipedInputStream的输出。实现“管道化”概念 PipedInputStream 指定用于多线程的数据的目的地:将其与FilterOutputStream对象相连以提供有用接口 FilterOutputStream 抽象类,作为“装饰器”的接口。其中,“装饰器”为其他的InputStream类提供有用功能。

3.FilterInputStream类型

类 功能 构造器参数 如何使用 DataInputStream 与DataOutputStream搭配使用,因此我们可以按照可移植方式从流读取基本数据类型(int,char,long等) InputStream 包含用于读取基本类型数据的全部接口 BufferedInputStream 使用它可以防止每次读取时都得进行实际写操作。代表“使用缓冲区” InputStream,可以指定缓冲区大小(可选的) 本质上不提供接口,只不过是向进程中添加缓冲区所必须的。与接口对象搭配 LineNumberInputStream 跟踪输入流中的行号;可调用getLineNumber()和setLineNumber(int) InputStream 仅增加了行号,因此可能要与接口对象搭配使用 PushbackInputStream 具有“能弹出一个字节的缓冲区”。因此可以将读到的最后一个字符回退 InputStream 通常作为编译器的扫描器,之所以包含在内是因为Java编译器的需要,我们基本上用不到

4.FilterOutputStream类型

类 功能 构造器参数 如何使用 DataOutputStream 与DatInputStream搭配使用,因此我们可以按照可移植方式从流读取基本数据类型(int,char,long等) OutputStream 包含用于写入基本类型数据的全部接口 PrintStream 用于产生格式化输出。其中OutputStream处理数据的存储,PrintStream处理显示 OutputStream,可以用boolean值指示是否每次换行时情况缓冲区(可选的)应该是对OutputStream对象的“final”封装。可能会经常使用到它 BufferedOutputStream 使用它以避免每次发送数据时都要进行实际的写操作。代表“使用缓冲区”。可以调用flush()清空缓冲区 OutputStream,可以指定缓冲区大小(可选的) 本质上并不提供接口,只不过向进程中添加缓冲区所必需的。与接口对象搭配

5.如何选择类

  1. 确定是输入还是输出
    输入流:InputStream Reader
    输出流:OutputStream Writer
  2. 操作的是否是纯文本
    是:字符流 Reader,Writer
    否:字节流 InputStream,OutputStream
  3. 具体的操作设备
    硬盘文件:
    – 读取:FileInputStream,FileReader
    – 写入:FileOutputStream,FileWriter
    内存
    – byte[]:ByteArrayInputStream, ByteArrayOutputStream
    – char[]:CharArrayReader, CharArrayWriter
    –String:StringBufferInputStream(已过时,因为其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
    –网络用Socket流
    –键盘:用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印
    4.是否需要转换流
    是,就使用转换流,从Stream转化为Reader,Writer:InputStreamReader,OutputStreamWriter
    5.是否需要缓冲提高效率
    是就加上Buffered:BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter
    6.是否需要格式化输出

例子
例:将一个文本文件中数据存储到另一个文件中。
1)数据源和数据目的:读取流,InputStream Reader 输出:OutputStream Writer
2)是否纯文本:是!这时就可以选择Reader Writer。
3)设备:是硬盘文件。Reader体系中可以操作文件的对象是 FileReader FileWriter。
FileReader fr = new FileReader(“a.txt”);
FileWriter fw = new FileWriter(“b.txt”);
4)是否需要提高效率:是,加Buffer
BufferedReader bfr = new BufferedReader(new FileReader(“a.txt”); );
BufferedWriter bfw = new BufferedWriter(new FileWriter(“b.txt”); );

参考文献

  1. Java输入输出流
  2. JAVA编程思想
1 0
原创粉丝点击