习题解答chapter09

1. Java中流的分类有哪些?

  • 从流动的方向上看:一般为输入流(InputStream)和输出流(OutputStream)两类。从读取类型上看,一般分为字节流和字符流。字节流是由InputStream和OutputStream派生出来的一系列类,以字节为处理单位;字符流是由Reader和Writer派生出来的一系列类,以16位Unicode码表示的字符为处理单位。
    习题解答chapter09

2. 字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?

  • 字节流InputStream:

java.io.InputStream

java.io.FileInputStream //文件输入流,对应 java.io.InputstreamReader
java.io.PipedInputStream //管道输入流,对应 java.io.Pipedreader
java.io.ObjectInputStream // 对象输入流,用于序列化问题
java.io.ByteArrayInputStream // 字节输入流,对应java.io.CharArrayReader
java.io.SequenceInputStream // 序列输入流

java.io.FilterInputStream // 过滤输入流包含一些其他输入流,它用作其基本数据源,可能沿途转换数据或提供其他功能。
java.io.DataInputStream
java.io.BufferedInputStream
java.io.PushbackInputStream

  • 字节流OutputStream:

java.io.OutputStream

java.io.FileOutputStream // 文件输出流,对应 java.io.FileReader
java.io.PipedOutputStream // 管道输出流,对应 java.io.PipedReader
java.io.ObjectOutputStream //对象输出流
java.io.ByteArrayOutputStream //字节输出流,对应 java.io.CharReader
java.io.FilterOutputStream // 过滤输出流

java.io.DataOutputStream
java.io.BufferedOutputStream
java.io.PrintStream

3. 字节流与字符流的转化是怎样的?Java对此提供了哪些支持?

输入的字节流有时需要转化为字符流,输出的字符流有时需要转化为字节流,转化过程也叫流的装配过程。转化的方法是:
(1) 输入字节流转为字符流需要用到InputStreamReader的构造方法:
InputStreamReader(InputStream in)
其使用方法为:
InputStreamReader ins = new InputStreamReader(new FileInputStream("c:\\text.txt") ) ;
之后通过ins的方法就可以从字符角度来读取文件text.txt。
(2) 输出字符流转为字节流要用到OutputStreamWriter或PrintWriter的构造方法:
OutputStreamWriter(OutputStream out)PrintWriter(OutputStream out);
其使用方法为:
OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream("c:\\text.txt") );
之后通过outs就可以直接输出字符到text.txt文件中。
这种转化过程并没有改变流的内容,只是改变了”看”流的角度。例如上面输人流还以再进行装配。查阅JDK帮助文档,可发现缓冲输人字符流的构造方法如下: BufferedReader(Reader in)
其参数说明只要是Reader的子类都可以作为BufferedReader的参数, 因此可写成:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\text.txt") ) );
虽然流中的内容是一样的, 但是br和ins的角度不同, ins是一个一个字符地读, 而br就以一行一行地读。

4. Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。

抽象的InputStream和OutputStream类允许我们对字串及数字进行读写。为达到这个目的,还需要功能更多的子类。例如:DateInputStream和DataOutputStream允许我们对所有基本的java类型进行读写。文件流类与抽象的InputStream和OutputStream类相似,这些类也只支持字节级的读写操作。换言之,只能从fin对象中读取字符和字节数组。byte b=fin.read(),他们没有提供专门的数值类型,所以DataInputStream没有办法从一个文件中获取数字。
解决方案:java给流职责分工,某些流(FileInputStream)负责从文件或另一些更特殊的地方读入字节数据。而另一些流(DataInputStream、PrintWriter)负责将字节”组装”成更有用的数据类型。必须综合运用这两种流,将其合并成所谓的”过滤流(FilteredStreams)”,方法是将一个现成的流传递给另一个流的构建器。

解决方案举例:从一个文件中读取数字

  • 步骤:
    1)创建一个FileInputStream;
    2)将其传递给一个DataInputStream的构造函数;
  • 代码:
    1) FileInputStream fin=new FileInputStream("a.txt");
    2) DataInputStream din=new DataInputStream(fin); double s=din.readDouble();
  • 演示程序:

`

Original: https://www.cnblogs.com/qiaofutu/p/14110985.html
Author: iiYing
Title: 习题解答chapter09

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/567233/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球