概要:流分别具有单独的功能,将不同的流组装套一起以实现复杂的功能。
一.字节的输出输出:(自己总结的分类)
1.从外部(文件等)中获取:
FileInputStream从文档中读取。(如果指定的不是绝对路径名,将以VM启动时所设置的工作目录解析。)
2.具有某些功能(缓冲机制等):
BufferedInputStream将请求的数据块置于缓冲区中,更高效。
PushbackInputStream可以预读下一个字节,之后可以将其推回流中(推回流中意味着下次调用read是会再次获取)
read() unread()
ZipInputStream从ZIP压缩文件中读取数据。
3.数据处理:
DataInputSream读入数值类型。
注意:上述流可自由组合。将希望得到的流置于最外层,中间的流只是提供所需要的功能。
关于ZIP流(包含于 java.util.zip):
(说明:每个zip文档包含多个项(ZipEntry))
ZipInputStream
ZipEntry getNextEntry()返回下一个entry
void closeEntry()关闭当前entry,之后可使用getNextEntry()继续读取下一个entry
ZipOutputStram
void putNextEntry(ZipEntry ze)将流定位到一个entry
void write(byte[] b, int off, int len) 将字节数组写入到所定位的entry中
void closeEntry()关闭当前entry.
二.字节和字符间的转换
以上全是针对字节的操作(Stream),一下两种流实现字节和字符间的转换。
OutputStreamWriter使用选定的字符编码方式(charset),把Unicode字符流转换为字节流。
InputStreamReader将字节的输入流转换为Unicode。(未指定charset时使用主机系统默认的字符编码方式)
三.文本输入输出
文本输出
PrintWriter以文本格式打印字符串和数字(不能写出原始字节)
print() println()
PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节
注意:
1. PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。
2. 以二进制格式写出数据,使用DataOutputStream
文本输入
BufferReaer必须建立在另一个字符流的基础之上(属于功能流),可以整行读取
read() readline()
Scanner 基于正则表达式的文本扫描器,可以从文件、输入流、字符串中解析出基本类型值和字符串值。
注意:
1. BufferedReader不能读取基本类型输入项,它总是读取string对象。推荐使用Scanner。
四.随机访问文件
RandomAccessFile类可以在文件中(也只能操作文件)任何位置查找或写入数据。(使用"r"或"rw"在指定用于读入/读入写出 访问选项)
RandomAccessFile独立于InputStream和OutputStream类系。
getFilePointer( ) 定位用
seek( ) 在文件里移动用
length( )判断文件大小
skipBytes()跳过多少字节数