1.Java中流的分类有哪些?
流从方向上看:一般分为输入流(InputStream)和输出流(OutputStream)两类。程序可以用输出流向文件写数据,用输入流从文件中读数据。而针对键盘只有输入流,针对屏幕只有输出流。从读取类型上分:一般分为字节流和字符流。字节流是从InputStream和OutputStream派生出来的一系列类,它以字节(byte)为基本处理单位。字符流是从Reader和Writer派生出的一系列类,它以16位的Unicode码表示的字符为基本处理单位。
2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
字节流(以缩进的层次表示继承关系):
java.io.InputStream(抽象类)
java.io.FileInputStream(通过指定文件路径的方式,将一个文件中的内容作为其他流的数据源,从而可使用流的方式对文件进行读操作)
java.io.PipedInputStream(管道用来把一个程序、线程和代码块的输出连接到另一个程序、线程和代码块的输入。管道输入流作为一个通信管道的接收端,管道输出端则作为发送端。管道流必须输入/输出并用,即在使用管道前,两者必须进行连接)
java.io.ObjectInputStream(能够输入/输出对象的流称为对象流)
java.io.ByteArrayInputStream(在字节数组和流之间搭建桥梁。ByteArrayInputStream的构造方法ByteArrayInputStream(byte[] buf)可以将字节数组构造成字节数组流的数据源,从而可以通过流的方式来读字节数组)
java.io.FilterInputStream(重写了父类InputStream的所有方法,对其他输入/输出流进行特殊处理,使得它在读写数据的同时还可以对数据进行特殊处理。此外还提供了同步机制,使得某一时刻只有一个线程可以访问一个输入与输出流)
java.io.DataInputStream(以统一方式读出或写入boolean、int、long、double等数据类型。此外,还提供了字符串读写的方法)
java.io.BufferedInputStream(实现了带缓冲的过滤流,它提供了缓冲机制,把节点流“捆绑”到缓冲流上,可以提高读写效率)
java.io.PushbackInputStream
java.io.OutputStream(抽象类)
java.io.FileOutputStream(通过指定文件路径的方式,将一个文件作为其他流的输出目的地,从而可使用流的方式对文件进行写操作)
java.io.PipedOutputStream(管道用来把一个程序、线程和代码块的输出连接到另一个程序、线程和代码块的输入。管道输入流作为一个通信管道的接收端,管道输出端则作为发送端。管道流必须输入/输出并用,即在使用管道前,两者必须进行连接)
java.io.ObjectOutputStream(能够输入/输出对象的流称为对象流)
java.io.ByteArrayOutputStream(可以将任意多字节的内容多次写入流中,最后整体转为一个字节数组)
java.io.FilterOutputStream(重写了父类OutputStream的所有方法,对其他输入/输出流进行特殊处理,使得它在读写数据的同时还可以对数据进行特殊处理。此外还提供了同步机制,使得某一时刻只有一个线程可以访问一个输入与输出流)
java.io.DataOutputStream(以统一方式读出或写入boolean、int、long、double等数据类型。此外,还提供了字符串读写的方法)
java.io.BufferedOutputStream(实现了带缓冲的过滤流,它提供了缓冲机制,把节点流“捆绑”到缓冲流上,可以提高读写效率)
java.io.PrintStream()(打印流,能在输出时自动完成两项功能:如果输出字符串,则完成字符的编码过程,如果有汉字,能将汉字自动转化为操作系统本身的字符集GBK;另外,如果其输出路径上接有缓冲流,当调用println方法或输出字符串中有换行标志时,则自动调用缓冲流的flush方法)
与之对应的字符流 (以缩进的层次表示继承关系): java.io.Reader
java.io.InputStreamReader
java.io.FileReader
java.io.CharArrayReader
java.io.PipedReader
java.io.BufferedReader
java.io.StringReader
java.io.FilterReader
java.io.Writer
java.io.OutputStreamWriter
java.io.FileWriter
java.io.CharArrayWriter
java.io.PipedWriter
java.io.BufferedWriter
java.io.StringWriter
java.io.FilterWriter
java.io.PrintWriter
3.字节流与字符流的转化是怎样的?Java对此提供了那些支持?
字节流与字符流的转化:输入字节流转为字符流需要用到InputStreamReader的构造方法(InputStreamReader(InputStream in));输出字符路转为字节流需要用到OutputStreamWriter或PrintWriter的构造方法(OutputStreamWriter(OutputStream out)或PrintWriter(OutputStream out))。
4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
作用:对其他输入/输出流进行特殊处理,能够在读写数据的同时对数据进行特殊处理,还提供了同步机制,使得某一时刻只有一个线程可以访问呢一个输入与输出流。常用的过滤流:FilterInputStream和FilterOutputStream.
5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?
对象的序列化和反序列化:对象的串行化又称序列化,是将内存中的动态对象表达成为可以传输的串形式,而与之相反的过程称为反串行化或反序列化。Java提供的支持:Serializable接口作为类对象能够被序列化的标志。
6.Java的File类表示什么?有什么作用?
File类表示文件或者目录的路径的抽象表现形式。作用:可以实现获取文件和目录属性等功能,可以实现对文件和目录的创建,删除等功能。
7.Java对文件的读写分别提供了哪些支持?
Java提供了FileInputStream类和FileReader类读文件,FileOutputStream类和FileWriter类写文件。