字符流
java将流按照读写单位分为:字节流与字符流.
字节流:以字节为单位读写,一次最少读写8位2进制.
字符流:以字符为单位读写数据,实际读写字节量由 指定的字符集与读写的字符数据有关,但是在java 内部表示字符时都是用char表示的(2字节).
java.io.Writer,java.io.Reader两个类是抽象类,是所有字符输出流与字符输入流的超类,里面规定了读写字符的相关方法.
/ * java.io.OutputStreamWriter
* java.io.InputStreamReader
* 转换流,它们是字符流的一对常用实现类,是一对高级 流.
* 实际开发中我们在读写文本数据时,流连接中经常
* 会使用到转换流,它们是流连接中重要的一环,但是
* 我们不会直接操作这对流.
*/
public class OSWDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos= new FileOutputStream("osw.txt");
/*
* 转换流在创建时通过指定第二个参数来确定
* 字符集.这样通过当前流写出的文本数据都会
* 按照该字符集转换为字节后再做写出
*/
OutputStreamWriter osw= new OutputStreamWriter(fos,"GBK");
osw.write("时间好不经用,抬头已是半生~");
System.out.println("写出完毕!");
osw.close();
}
}
通常java中其他的高级字符流都只能连接在其他字符流上,都不能直接连接字节流.但是转换流是可以连接在字节流上的,而本身又是字符流,这样就可以让其他的字符流与字节流衔接了,起到了"转换器"的作用.
public class ISRDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis= new FileInputStream("./src/io/ISRDemo.java");
InputStreamReader isr= new InputStreamReader(fis);
int d = -1;
while((d = isr.read())!=-1) {
System.out.print((char)d);
}
isr.close();
}
}
java.io.BufferedWriter
java.io.BufferedReader
是缓冲字符输出与输入流,是一对高级流内部有缓冲区,读写文本数据效率高.
java.io.PrintWriter
内部总是连接BufferedWriter作为缓冲加速使用 并且PW还支持自动行刷新功能,开发比较常用
public class PWDemo{
public static void main(String[] args) throws IOException {
FileOutputStream fos= new FileOutputStream("pw2.txt");
OutputStreamWriter osw= new OutputStreamWriter(fos,"GBK");
BufferedWriter bw= new BufferedWriter(osw);
PrintWriter pw= new PrintWriter(bw);
pw.println("你好");
pw.println("再见");
System.out.println("写出完毕!");
pw.close();
}
}
public class PWDemo2 {
public static void main(String[] args) throws IOException {
/*
* PrintWriter提供了对文件直接写操作的构造器
* PrintWriter(File file)
* PrintWriter(String path)
* 并且以上两种构造器还支持一个重载,第二个参数
* 为字符集的名称,这样可以按照指定的字符集写出
* 文本数据.
*/
PrintWriter pw= new PrintWriter("pw.txt","GBK");
pw.println("若非生活所迫,谁愿把自己弄的一身才华~~~");
System.out.println("写出完毕!");
pw.close();
}
}
java.io.BufferedReader
缓冲字符输入流:块读数据效率高,并且可以按行读取字符串.
public class BRDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis= new FileInputStream("./src/io/BRDemo.java");
InputStreamReader isr= new InputStreamReader(fis);
BufferedReader br= new BufferedReader(isr);
String line = null;
/*
* String readLine()
* 返回一行字符串,缓冲流会将一行字符串(到
* 换行符"\n"为止,但不包含该"\n")的内容
* 返回.若返回值为null则表示流已经读取到了
* 末尾.
*/
while((line = br.readLine())!=null) {
System.out.println(line);
}
br.close();
}
}
路漫漫其修远兮~~~