1.Java中流的分类有哪些?
从流动方向来看:字节流和字符流。
从读取类型来看:字节流和字符流。
从发生的源头看:节点流和过滤流。
2.字节流InputStream和OutoutStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
(1)FileInputStream和FileOutputStream类:
意思指对文件数据以字节的形式进行读取和打印操作如读取图片视频等
public static void main(String[] args)
{
File file=new File("xxxxxxxx"); //根据路径创建File类对象--这里路径即使错误也不会报错,因为只是产生File对象,还并未与计算机文件读写有关联
try
{
FileInputStream fileInputStream=new FileInputStream(file);//与根据File类对象的所代表的实际文件建立链接创建fileInputStream对象
}
catch (FileNotFoundException e)
{
System.out.println("文件不存在或者文件不可读或者文件是目录");
}
}
(2)PipeInputStream和PipeOutputStream类:
在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的主要流程是在一个线程中向PipedOutputStream写入数据,这些数据会自动传送到对应的管道输入流PipedInputStream中,其他线程通过读取PipeInputStream中缓冲的数据实现多线程间通信。
public PipedInputStream(PipedOutputStream src) throws IOException {
this(src, DEFAULT_PIPE_SIZE);
}
public PipedInputStream(PipedOutputStream src, int pipeSize)
throws IOException {
initPipe(pipeSize);
connect(src);
}
public PipedInputStream() {
initPipe(DEFAULT_PIPE_SIZE);
}
(3)ByteArrayInputStream与ByteArrayOutputStream类:
ByteArrayOutputStream是用来缓存数据的(数据写入的目标(output stream原义)),向它的内部缓冲区写入数据,缓冲区自动增长,当写入完成时可以从中提取数据。由于这个原因,ByteArrayOutputStream常用于存储数据以用于一次写入。
FileInputStream fis=new FileInputStream("test");
BufferedInputStream bis=new BufferedInputStream(fis);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int c=bis.read();//读取bis流中的下一个字节
while(c!=-1){
baos.write(c);
c=bis.read();
}
bis.close();
byte retArr[]=baos.toByteArray();
(4)ObjectInputStream与ObjectOutputStream类:
ObjectInputStream和ObjectOutputStream类创建的对象被称为对象输入流和对象输出流。
`File file = new File("D:" +File.separator+"student.txt");
OutputStream outputStream = new FileOutputStream(file);
ObjectOutputStream out = new ObjectOutputStream(outputStream);`
(5)FilterInputStream与FilterOutputStream类:
FilterInputStream的作用"封装其他的输入流,并为他们提供额外的功能".
FIlterOutputStream的作用是用来"封装其他的输出流,并为它们提供额外的功能".主要包括BufferedOutputStream和DataOutputStream和PrintStream.
3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?
输入字节流转为字符流:InputStreamReader(InputStream in)
输出字符流转为字节流:
OutputStreamWriter或PrintWriter
4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
DataInput和DataOutputStream,可从字节流中写入,读取Java基本数据类型,不依赖于机器的具有数据类型,方便存储和恢复数据。
BufferedReader的使用:用于缓存字符流,以便于一行一行的读。(常用于装配文件磁盘、网络设备、终端读写开销大的节点流,提高读写性能)
5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?
序列化/串行化:将实现了Seriallizable接口的对象转换成一个字节序列。
反序列化:将得到的这个字节序列完全恢复为原来的对象。
串行化的目的:便于介质存储和网络传输。
Java为其提供ObjectInputStream类和ObjectOutputStream类
6.Java的File类表示什么?有什么作用?
File类不仅指系统中的文件,也指目录,因为目录也是特殊的文件
一个File对象而可以代表一个文件或目录,File可以实现获取文件和目录属性等功能,可以实现对文件和目录的创建,删除等功能
7.Java对文件的读写分别提供了哪些支持?
对文件操作提供了相应的类和接口如
FileInputStream ,FileInputStream ,FileReader ,FileWriter。