在Thinking in java的书中,有这样一个例子,我只给出了部分代码,如下:
// 4. File output
try {
BufferedReader in4 = new BufferedReader(
new StringReader(s2));
PrintWriter out1 = new PrintWriter(
new BufferedWriter(new FileWriter("IODemo.out")));
int lineCount = 1;
while((s = in4.readLine()) != null )
out1.println(lineCount++ + ": " + s);
out1.close();
} catch(EOFException e) {
System.err.println("End of stream");
}
首先是用·new FileWriter("IODemo.out")来建立一个接收数据的文件,外面包裹着bufferedWrite来实现缓冲,这都好理解,我想请问一下最外面用PrintWriter来包裹着是什么目的?没有它可以吗?
// 4. File output
try {
BufferedReader in4 = new BufferedReader(
new StringReader(s2));
PrintWriter out1 = new PrintWriter(
new BufferedWriter(new FileWriter("IODemo.out")));
int lineCount = 1;
while((s = in4.readLine()) != null )
out1.println(lineCount++ + ": " + s);
out1.close();
} catch(EOFException e) {
System.err.println("End of stream");
}
首先是用·new FileWriter("IODemo.out")来建立一个接收数据的文件,外面包裹着bufferedWrite来实现缓冲,这都好理解,我想请问一下最外面用PrintWriter来包裹着是什么目的?没有它可以吗?
try {
DataOutputStream out2 = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("Data.txt")));
out2.writeDouble(3.14159);
out2.writeUTF("That was pi");
out2.writeDouble(1.41413);
out2.writeUTF("Square root of 2");
out2.close();
DataInputStream in5 = new DataInputStream(
new BufferedInputStream(
new FileInputStream("Data.txt")));
// Must use DataInputStream for data:
System.out.println(in5.readDouble());
// Only readUTF() will recover the
// Java-UTF String properly:
System.out.println(in5.readUTF());
// Read the following double and String:
System.out.println(in5.readDouble());
System.out.println(in5.readUTF());
} catch(EOFException e) {
throw new RuntimeException(e);
}
这个例子我倒是能看懂,但书中说“为了使输出可供另一个流恢复的数据,我们必需使用DataOutputStream 写入数据, DataInputStream来恢复数据。我想请问为何不可使用reader和writer所对应的BufferedReader和BufferedWriter?我只知道datainputstream是用来处理字符的而bufferedreader是用来处理字节的。这是说对于同一段数据,即可以按字节的方式来处理又可以按字符的方式来处理,是这样吗?
2,BufferedReader是带缓冲的读入流.
建议lz参考一下think in java中的流一章.
我只知道datainputstream是用来处理字符的而bufferedreader是用来处理字节的。
这句话错了,reader与writer大多处理字符的。
data使用字节处理比较好。因为字符也是几个字节组成,有些情况下,用字符读取会出现读取不完成,形成乱码等。
凡是带stream的是字节流,带reader的是字符流,这个搞反了。
第二
对于同一段数据,即可以按字节的方式来处理又可以按字符的方式来处理,是这样吗?
是的
DataOutputStream out2 = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("Data.txt")));
out2.writeDouble(3.14159);
out2.writeUTF("That was pi");
out2.writeDouble(1.41413);
out2.writeUTF("Square root of 2");
out2.close();
DataInputStream in5 = new DataInputStream(
new BufferedInputStream(
new FileInputStream("Data.txt")));
// Must use DataInputStream for data:
System.out.println(in5.readDouble());
// Only readUTF() will recover the
// Java-UTF String properly:
System.out.println(in5.readUTF());
// Read the following double and String:
System.out.println(in5.readDouble());
System.out.println(in5.readUTF());
} catch(EOFException e) {
throw new RuntimeException(e);
} 在Thinking in java书中说“为了使输出可供另一个流恢复的数据,我们必需使用DataOutputStream 写入数据, DataInputStream来恢复数据。
我想请问为何不可使用reader和writer所对应的BufferedReader和BufferedWriter来应用到这里的情况?
一种是以字节为单位来处理的,一种是以字符为单位的。谢谢。
例如DataInputStream中的readFloat()表示将输入流中的下4个字节读取出来以浮点数形式返回 当然如果这4个字节的数据无法转换成浮点数会产生异常