Java的I/O笔记(3)
转换流
可以把一个字节流转换为一个字符流,原来按字节读取的字节流“套上”它以后,就可以转换为按字符读取。
1: import java.io.*;
2: public class TestTransForm1 {
3: public static void main(String[] args) {
4: try {
5:
OutputStreamWriter
osw = new OutputStreamWriter(
6: newFileOutputStream
("d:\\bak\\char.txt"));
7: osw.write("mircosoftibmsunapplehp");
8: System.out.println(osw.getEncoding());
9: osw.close();
10: osw = new OutputStreamWriter(new FileOutputStream("d:\\bak\\char.txt", true),
11: "ISO8859_1"); // latin-1
12: //true 表示文件末尾追加
13: osw.write("mircosoftibmsunapplehp");
14: System.out.println(osw.getEncoding());
15: osw.close();
16: } catch (IOException e) {
17: e.printStackTrace();
18: }
19: }
20: }
OutputStreamWriter : OutputStream是字节流,Writer是字符流, 连起来的OutputStreamWriter就是把OutputStream转换成Writer
构造函数(OutputStream out) FileOutputStream是OutputStream的子类,所以也可以传入作为参数。
本来的字节流OutputStream,外面套个OutputStreamWriter,就变成字符流
1: import java.io.*;
2: public class TestTransForm2 {
3: public static void main(String args[]) {
4: InputStreamReader isr =
5: new InputStreamReader(System.in);
//in是系统的标准输入流,是InputStream的一个子类 ,从DOS窗口输入
6: BufferedReader br = new BufferedReader(isr);
//为何又包了一层?因为BufferedReader有个很好用的方法readline()
7: String s = null;
8: try {
9: s = br.readLine();
10: while(s!=null){
11: if(s.equalsIgnoreCase("exit")) break;
12: System.out.println(s.toUpperCase());
13:
s = br.readLine();
14: }
15: br.close();
16: } catch (IOException e) {
17: e.printStackTrace();
18: }
19: }
20: } //阻塞,不输入就不能干别的
数据流
DateOutputStream 和 DateInputStream 分别继承自OutputStream 和 InputStream ,属于处理流
需要分别“套接”在OutputStream 和 InputStream 类型的节点流上
提供了可以存取与机器无关的Java原始数据类型(double,int…)的方法.
构造方法:DateOutputStream( OutputStream out)
DateInputStream( InputStream in )
1: import java.io.*;
2: public class TestDataStream {
3: public static void main(String[] args) {
4:
ByteArrayOutputStream baos =
5:
new ByteArrayOutputStream();
//new出一个“管道”的时候,同时自动建一个字节数组
6:
DataOutputStream dos =
7:
new DataOutputStream(baos);
//DataOutputStream好处是可以直接输出基本数据类型
8: try {
9:
dos.writeDouble(Math.random()); //写入一个8byte的数
10:
dos.writeBoolean(true); //写入一个1byte的boolean
11: ByteArrayInputStream bais =
12: new ByteArrayInputStream(baos.toByteArray
());
13: System.out.println(bais.available()
);
14: DataInputStream dis = new DataInputStream(bais);
15: System.out.println(dis.readDouble
()); 先写先读,所以要先readdouble,再readboolean
16: System.out.println(dis.readBoolean
());
17: dos.close(); dis.close();
18: } catch (IOException e) {
19: e.printStackTrace();
20: }
21: }
22: }

浙公网安备 33010602011771号