现在的位置: 首页 > 综合 > 正文

JDK中个别类的介绍-IO读写(java.io.*)

2014年11月17日 ⁄ 综合 ⁄ 共 1634字 ⁄ 字号 评论关闭

一直以来对于java.io包中的Stream、writer/reader、Buffered*等较为混沌,现在理一理它们之间的关系。主要依据字符、字节字符:人可以看。字节:机器的编码,用于传输或读写硬盘上的数据。

字节的读写(Stream)

FileInputStream用于获得输入字节,可以读取诸如图像之类的原始字节流。

FileInputStream fileInputStream=new FileInputStream(File file);
int read(byte[] b);//从输入流中将最多b.length个字节数据读入b
int read(byte[] b, int off, int len)://最多len字节数据读入b,位置是从b的off处开始
int skip(long n);//从输入流中跳过n字节。

FileOutputStream:文件输出流,将数据写入File。

FileOutputStream(File);
void write(byte[] b);
void write(byte[] b, int off, int len);

字符的读写

FileReader用于读取字符文件。

FileReader fileReader=new FileReader(File file);

FileWriter用于写入字符文件。

FileWriter fileWriter=new FileWriter(File file);

字节《=》字符转换

InputStreamReader:字节流=》字符流,可使用指定的Charset读取字节并解码为字符。

InputStreamReader(InputStream);
InputStreamReader(InputStream,Charset);
int read(char[],int offset,int length);

OutputStreamWriter:字符流=》字节流,可使用指定的Charset将要写入流中的字符编码成字节。

OutputStreamWriter(OutputStream);
OutputStreamWriter(OutputStream out,Chaset);
void write(char[] cbuf,int off,int len);

Reader/Writer的包装-提升性能

BufferedReader 从字符输入流中读取文本,缓冲各个字符,高效读取。api建议用它包装开销较高的FileReader和InputStreamReader。

BufferedReader(Reader in);
BufferedReader bf1=new BufferedReader(new FileReader(""));
BufferedReader bf2=new BufferedReader(new InputStreamReader());
int read(char[] cbuf,int off, int len);
String readLine();

BufferedWriter将文本写入字符输出流,缓冲各个字符。可用于包装开销很高的FileWriter,OutputStreamWriter。

BufferedWriter(Writer);
BufferedWriter(new FileWriter(""));
BufferedWriter(new OutputStreamWriter());
void write(char[] cbuf,int off, int len);
void write(String, int off, int len);

以上是依据 机器<->人 这样的流程来分析。下面看下类图:

       


           

补充下:Stream字节流操作的超类,Reader/Writer:字符流操作的超类。BufferedInputStream/BufferedOutputStream对字节流的操作添加了一些功能:缓冲、mark和reset等。可用于包装InputStream/OutputStream。

抱歉!评论已关闭.