1.流 stream
java对文本的读和写是通过输入流和输出流来完成的。
输出流:OutputStream
//读写规范
//为了得到正确的变量作用域,在try外声明流变量
FileOutputStream fos = null;
byte[] buf = new byte[2048];
try {
//在try块内完成初始化
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
} finally {
try {
//为了避免空指针异常
if (fos != null)
//释放资源(文件句柄,网络端口,其他资源)
fos.close();
} catch (IOException e) {
//忽略或者记录为日志
}
}
//在java7之后引入了“带资源的try”构造,不需要在try声明变量;也不需要finally子句,java会对所有AutoCloseable对象自动调用close(),所以
try {
//在try块内完成初始化
FileOutputStream fos = new FileOutputStream(file);
fos.flush();
}catch(IOException ex){
System.err.println(ex.getMessage());
}
输入流:InputStream
InputStream is = new FileInputStream();
byte[] b = new byte[1024];
int read = is.read(b);
//补充方法
public void mark(int readAheadLimit); //给输入流设置标记
public void reset() throws IOException; //将输入流重置到标记处,可以从标记处开始读取
public boolean markSupport(); //判断当前输入流流是否支持标记
2.缓冲流(BufferedStream)
- 输出缓冲流:BufferedOutputStream
在开始写入数据时,首先将数据写入缓冲区,到达一定大小后,再一次性将数据写入到原始输出流中(减少了数据量的传输大小,从而提高了写的速度)
public BufferedInputStream(InputStream inputStram);
public BufferedInputStream(InputStream inputStram,int bufferSize);
- 输入缓冲流:BufferedInputStream
在开始读取数据时(从本地磁盘读取数据),首先将数据读到缓冲区,到达一定的大小后,再一次性将数据放入原始输入流中(从底层流中读取几百字节的速度几乎和读取1字节的速度相同,所以可以显著提升性能;但是由于网络传输速度的瓶颈,在网络连接的场景下效果不会十分明显)
public BufferedOutputStream(OutputStream outputStram);
public BufferedOutputStream(OutputStream outputStram,int bufferSize);
3.过滤器输出流(PrintStram)
public PrintStram(OutputStram outputStrem);
public PrintStram(OutputStram outputStrem,boolean autoFlush);
注意:
1.PrintStram会掩盖所有的异常,但是不会抛出
2.在不同系统(window,mac)展示结果可能不尽相同
3.应该尽量减少PrintStram的使用
4.数据流(DataStream)
可以用二进制格式读/写java的基本数据类型和字符串。(主要用于两个不同的Java程序之间交换数据)
数据输入流:DataInputStram
数据输出流:DataOutputStream
5.阅读器(reader),书写器(writer)
串链到原始的输入/输出流上,使程序可以对字符进行操作(原始流是对字节操作),同时可以处理字符的编码
InputStreamReader:将字符输入流按照指定的编码(没有指定就使用默认的编码)转化为字节流,然后放入原始的输入流中
public InputStreamReader(InputStream in, Charset charset) { }
OutputStreamWritter:将字节输出流按照指定的编码(没有指定就使用默认的编码)转化为字符流,然后放入原始的输出流中
public OutputStreamWriter(OutputStream out, Charset cs) { }
6.过滤器阅读器(BufferedReader),过滤器书写器(BufferedWritter)
BufferedReader:常用方法readLine() //读入一行
BufferedWritter:常用方法newLine() //写入一行
7.PrintWritter
用于取代PrintStram类,它能正确的处理多字节字符集和国际化文本。
网友评论