1.Java中流的分类有哪些?
2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?
4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?
6.Java的File类表示什么?有什么作用?
7.Java对文件的读写分别提供了哪些支持?
1.Java中流的分类有哪些?
按流方向分类:输入流,输出流
按流内容分类:字符流,字节流
按源头分类:节点流和过滤流
2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
InputStream:
--字节输入流,FileInputStream(File file) FileInputStream(String file_path)
InputStream is = new FileInputStream(file_path);
//一个个字节读取
int len = 0;
while((len = is.read()) != -1){ //每次读取一个字节,没有就返回-1
System.out.println((char)len);
}
//按字节数组读取
byte[] buffer = new byte[1024];
while((len = is.read(buffer)) != -1){ //读取的字节数组放入buffer里面,返回数组的长度len,
System.out.println(new String(buffer,0,len)); //有多长就输出多长,防止把遗留的数据输出
}
--反序列化。ObjectInputStream.
ObjectInputSteram ois = new ObjectInputStream(new FileInputStream(file_path));
Obj obj = (obj)ois.readObject(); //返回一个对象,记得强转
--缓冲输入流。BufferedInputStream. 自带一个8k的缓冲池,效率更高。
InputStream is = new FileInputStream(file_path);
BufferedInputStream bis = new BufferedInputStream(is); //包装成高级的缓冲字节输入流
//方法:bis.read()同上
OutputStream
--字节输出流 FileOutputStream.
OutputStream os = new FileOutputStream(file_path);
os.write(int a); //可以输出一个字节
os.write(byte[] buffer,int pos,int len); //可以输出一个字节数组,从pos开始,长度为len
--序列化 ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file_paht));
oos.writeObejct(Object obj); //序列化方法
//序列化的对象要实现序列化接口Serializable
--缓冲输出流 BufferOutputStream
OutputStream os = new FileOutputStream(file_path);
BufferedOutputStream bos = new BufferedOutputStream(os);//包装成高级的缓冲字节输出流
//os.write();方法同上
3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?
Reader isr = new InputStreamReader(new FileInputStream(String file_path),,String charset); //字节输入流转化位字符输入流,charset为编码,可以指定,可以默认(一般也不会用)
Writer osw = new OutputStreamWriter(new FileOutputStream(String file_path),String charset)
//字节输出流转化为字符输出流,charset为编码,可以指定可以默认
4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
FilterInputStream 和 FilterOutputStream分别重写了父类InputStream和OutputStream的所有方法,对其他输入输出流进行特殊处理。要使用过滤流,首先必须把它连接到某个输入输出节点流上,通常在构造方法的的参数中指定所要连接的节点流:
FilterInputStream(InputStream in);
FilterOutputStream(Outputstream out);
5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?
序列化:将对象数据直接存储到文件中.
OutputStream os = new FileOutputStream(file_path)
ObjectOutputStream oos = new ObjectOutputStream(os);
//方法:oos.write(Object obj);
反序列化:将java对象数据从文件中恢复.
InputStream is = new FileInputStream(file_path); //file_path为文件路径
ObjectInputStream ois = new ObjectInputStream(is);
//方法:obj = ois.readObject();
6.Java的File类表示什么?有什么作用?
File类不仅指系统中的文件,也指目录,因为目录也是特殊的文件。
作用:表示一个文件对象,文件(或目录)路径名字的抽象表示。
7.Java对文件的读写分别提供了哪些支持?
文件类(File)
1.获取文件信息
getName():获取文件名称,返回String
canRead():boolean类型,是否可读
exist()/isFile():boolean类型,是否存在
length():long,文件长度,以字节为单位
getAbsolutePath():文件绝对路径,返回String
getParent():文件父路径,返回String
isDirectory():boolean 是否为目录
isHidden():boolean是否隐藏
lastModified():long,最后修改时间
delete():删除文件
createNewFile():通过实例创建文件
2.文件输入输出流类
1、字节流
InputStream类:是字节输入流的抽象类,所有字节输入流的父类 eg:BufferedInputStream,FileInputStream等。
常用方法:
read():读取数据的下一个字节,返回0~255的int字节值,如果已达到流末尾而没有可用字节,返回-1。
read(byte[] b):输入流读取一定长度的字节,并以整数形式返回字节数。
close():关闭流。
OutputStream类:是字节输出流的抽象类,所有字节输出流的父类 eg:BufferedOutputStream,FileOutputStream等。
常用方法:
write(int b):将指定字节写入输出流。
write(byte[] b):将b个字节从指定byte数组写入此流。
write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始len个字节写入流。
flush():彻底完成输出并清空缓存区。
close():关闭流。
BufferedInputStream、BufferedOutputStream:带缓存的输入输出流。
FileInputStream:以字节流方式读取,FileOutputStream以字节流方式写入。
2、字符流
Java为支持文件的读写引入Reader和Writer两个类。
Reader类:是字符流输入流的抽象类,所有字符输入流的父类 eg:BufferedReader,InputStreamReader,FileReader等。
Writer类:是字符流输出的抽象类,所有字符输出流的父类 eg:BufferedWriter,OutputStreamWriter,FileWriter等