1.Java中流的分类有哪些?
按流动方向分类:分为输入流和输出流
输入流:如System.in是一个InputStream类型输入流。
输出流:如System.out 是一个PrintStream类型输出流。
按读取类型分类:分为字节流和字符流
字节流:如System.in是一个InputStream类型字节流。
字符流:如new InputStreamReader(System.in)是一个字符流对象。
按发生的源头分类:分为节点流和过滤流类
节点流:直接操作目标设备对应的流 如文件流,标准输入输出流。
过滤流:继承带有关键字Filter的流 用于包装操作节点流,方便读写各种类型的数据。
2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
InputStream的子类
FileInputStream 文件流
PipedInputStream 管道输入流,读取管道内容,多和PipedOutputStream一起用于多线程通信。
ObjectInputStream 用来恢复被序列化的对象。
ByteArrayInputStream 包含一个内存缓冲区,字节从中取出。
SequenceInputStream 是多种输入流的逻辑串联,从第一个输入流读取,直到最后一个输入流。
FilterInputStream 过滤流,在读写数据的同时还可以对数据进行特殊处理。
OutputStream的子类
FileOutputStream 文件流。
PipedOutputStream 管道流。
ObjectOutputStream 将对象序列化后写入指定地方。
ByteArrayOutputStream 在字节数组和流之间搭建桥梁。
SequenceOutputStream 是多种输入流的逻辑串联。
FilterInputStream 过滤流,在读写数据的同时还可以对数据进行特殊处理。
3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?
输入字节流转为字符流需要用到inputstreamReader的构造方法:
InputStreamReader(InputStream in)
InputStreamReader ins = new InputStreamReader(System.in);
InputStreamReader ins = new InputStreamReader(new FileInputStream(“test.txt”));
输出字符流转为字节流用到OutputStreamWriter或PrintWriter的构造方法:
OutputStreamWriter(OutputStream out)
PrintWriter(OutputStream out)
OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(“test.txt”));
4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
过滤流: BufferedInputStream和BufferedOutputStream, 缓存作用,用于装配文件磁盘、网络设备、终端等读写开销大的节点流,提高读写性能。
过滤流BufferedReader的使用:用于缓存字符流,可以一行一行的读。
PrintWriter的使用:可以向该字符流中写入Java基本数据类型,用于包装输出字符流类对象 。
5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?
串行化(Serialization):又称序列化,将实现了Seriallizable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,后者又称反序列化。
串行化的目的:便于介质存储和网络传输。
使用ObjectInputStream类和ObjectOutputStream类。
6.Java的File类表示什么?有什么作用?
7.Java对文件的读写分别提供了哪些支持?
import java.io.*;
public class OpenFile {
public static void main(String args[]) throws IOException{
try{ //创建文件输入流对象
FileInputStream rf = new FileInputStream("OpenFile.java");
int n=512,c=0;
byte buffer[] = new byte[n];
while ((c=rf.read(buffer,0,n))!=-1 ){ //读取输入流
System.out.print(new String(buffer,0,c));
}
rf.close(); //关闭输入流
}
catch (FileNotFoundException ffe){
System.out.println(ffe);}
catch (IOException ioe){
System.out.println(ioe);
}
}
import java.io.*;
public class Write1 {
public static void main(String args[]){
try{
System.out.print("Input: ");
int count,n=512;
byte buffer[] = new byte[n];
count = System.in.read(buffer); //读取标准输入流
FileOutputStream wf = new FileOutputStream("Write1.txt");
//创建文件输出流对象
wf.write(buffer,0,count); //写入输出流
wf.close(); //关闭输出流
System.out.println("Save to Write1.txt!");
}
catch (FileNotFoundException ffe){
System.out.println(ffe);}
catch (IOException ioe){
System.out.println(ioe);} }
}