I/O流中必不可少的是字节流,字符流都是在字节流的基础上参照编码集进行操作,字符流=字节流+编码集
缓冲流为字节流、字符流提高效率,可以发现缓冲流的方法与字节流、字符流差不多
目录
字节流:
字符流:
缓冲流:
FileInputStream 类(字节输入流)
创建一个文件输入流
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 |
|
读取
int | read() 从此输入流中读取一个数据字节。 |
int | read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 |
int | read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 |
//案例一:
FileInputStream fis = new FileInputStream("test.txt");
fis.read();//返回读取的字节的ASCII码值,当无读取字节时返回-1
//案例二:
FileInputStream fis = new FileInputStream("test.txt");
byte[] buf = new byte[5];//byte[]一个角标所存的元素刚好为一个字节
int len = 0;
while( (len=fis.read(buf)) != -1 ){ /*读取5个字节,存到buf数组中,并返回读取字节数,
若可读取的字节为n<5,则读取n个字节,返回n
*/
System.out.println( new String( buf,0,len ) );//打印buf中从角标0开始,len长度个元素
}
FileOutputStream 类(字节输出流)
创建一个文件输出流
FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 |
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 |
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。 |
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。 |
写入
void | write(byte[] b) 将 b.length 个字节写入此输出流。 |
void | write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
void | close() 关闭此文件输出流并释放与此流有关的所有系统资源。 |
//案例一:
FileOutputStream fos = new FileOutputStream("text.txt");
fos.write(new String("abcdef").getBytes());//将abcdef转为byte[]数组后写入文件text.txt
InputStreamReader 类(字符输入流)
字符输入流是以字节输入流为基础,读取字节并将其解码为字符
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 |
InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。 |
int | read() 读取单个字符。 |
int | read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。 |
//案例一:
FileInputStream fis = new FileInputStream("f1.txt");
InputStreamReader isr = new InputStreamReader(fis);//使用默认编码集GBK
System.out.println((char)isr.read());
isr.read();
//案例二:
InputStreamReader isr = new InputStreamReader( new FileInputStream("f1.txt") ,"utf-8");//使用utf-8编码集
char[] cbuf = new char[3];
int len = 0;
while ( (len=isr.read(cbuf)) != -1 ) {
System.out.println( new String(cbuf,0,len) );
}
OutputStreamWriter 类(字符输出流)
字符输出流以字节输出流为基础,将写入的字符编码为字节
OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。 |
void | write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | write(int c) 写入单个字符。 |
void | write(String str, int off, int len) 写入字符串的某一部分。 |
void | close() 关闭此流,但要先刷新它。 |
void | flush() 刷新该流的缓冲。 |
//案例一:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f1.txt"));
osw.write("写入汉字",0,4);//注意:在缓冲中
osw.flush();//将该流的缓冲刷新到硬盘
osw.close();//关闭该流
BufferedInputStream 类(字节缓冲流)
提高字节读入效率
BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in ,以便将来使用。 |
int | read() 参见 InputStream 的 read 方法的常规协定。 |
int | read(byte[] b, int off, int len) 从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。 |
void | close() 关闭此输入流并释放与该流关联的所有系统资源。 |
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("text.txt"));
//操作与FileInputStream类对象操作类似
BufferedOutputStream 类(字节缓冲流)
提高字节写出效率
BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 |
void | flush() 刷新此缓冲的输出流。 |
void | write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。 |
void | write(int b) 将指定的字节写入此缓冲的输出流。 |
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("text.txt") );
BufferedReader 类(字符缓冲流)
提高字符读入效率
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
int | read() 读取单个字符。 |
int | read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 |
String | readLine() 读取一个文本行。 |
void | close() 关闭该流并释放与之关联的所有资源。 |
BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("text.txt")) );
BufferedWriter 类(字符缓冲流)
提高字符写出效率
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 |
void | write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void | write(int c) 写入单个字符。 |
void | write(String s, int off, int len) 写入字符串的某一部分。 |
void | newLine() 写入一个行分隔符。 |
void | close() 关闭此流,但要先刷新它。 |
void | flush() 刷新该流的缓冲。 |
BufferWriter bw = new BufferWriter( new OutputStreamWriter(new FileOutputStream("text.txt")));