1、打印流PrintStream是从类java.io.FilterOutputStream继承的字段。
其实我们在以前的时候就在用了,就是我们经常用的Sytem.out.println(),System.out所对应的类型就是PrintStream。
它的构造函数函数可以接收三种数据类型的值。
1,字符串路径。
2,File对象。
3,OutputStream。
2、PrintWriter是一个字符打印流。构造函数可以接收四种类型的值。
1,字符串路径。
2,File对象。
对于1,2类型的数据,还可以指定编码表。也就是字符集。
3,OutputStream
4,Writer
对于3,4类型的数据,可以指定自动刷新。
注意:该自动刷新值为true时,只有三个方法可以用:
println, , printf , format.
//如果想要既有自动刷新,又可执行编码。如何完成流对象的包装?
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8"),true);
//如果想要提高效率。还要使用打印方法。
PrintWriter pw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8")),true);
//把3.1415926和北京输入到pst2.txt文件中
PrintStream ps = new PrintStream(new FileOutputStream(new File("res/pst2.txt")));
ps.print(3.1415926);
ps.print("北京");
/////////////////////////////////////////
FileInputStream fis =new FileInputStream("res/pst2.txt");
int len = fis.available();
、//把文件中的数据读取出来,并进行字节的转换
byte[] buf = new byte[len];
while(fis.read(buf) != -1){
//而输出语句输出的是字符型的,但是却与上面的语句发成冲突,所以此时输出的是乱码
System.out.println(new String(buf));
/////////////////////////////////
BufferedReader br = new BufferedReader( new FileReader("res/pst2.txt"));
//建立一个字符串型的对象
String content = null;
///while语句
while((content = br.readLine()) != null){
//此时的输出语句输出的为正确的
System.out.println(content);
3、管道流,PipedInputStream和PipedOutputStream
比方说有两个人互相传递东西,东西的传递路线就是数据的传输路线,其中双方必须是同时工作,否则的话就是行不通。这就是管道流。同时这两个流使用的时候,需要加入多线程技术,比如说qq的聊天窗口。
4.编码转换
String s = "你好";
// 编码。转换成了字节
byte[] b = s.getBytes("GBK");
//此打印语句输出的是字符串,也就是“你好”
System.out.println(new String(b, "GBK"));
// 解码。
String s1 = new String(b, "iso8859-1");
//此输出语句输出的是错误的,因为上一句是错误的,上一句String类的构造函数是想把字节转换成字符,但内部却成为了转换成为阿拉码,矛盾。输出的为乱码
System.out.println(s1);// ????
// 想要还原。
l 对s1先进行一次解码码表的编码。获取原字节数据。 然后在对原字节数据进行指定编码表的解码。
l //转换成为字节流,然后转换成string字符串并输出
byte[] b1 = s1.getBytes("iso8859-1");
System.out.println(new String(b1, "GBK"));
}
}