我正在为 android 开发一个聊天室应用程序。我阅读了不同的教程;其中一些使用 PrintWriter 发送数据,其中一些使用 DataOutputStream。这两者有什么区别?哪个更适合聊天应用程序?
3 回答
来自 java 文档
DataOutputStream允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后,应用程序可以使用数据输入流来读回数据。
PrintWriter将对象的格式化表示打印到文本输出流。此类实现了 PrintStream 中的所有打印方法。它不包含写入原始字节的方法,程序应该使用未编码的字节流。
一句话的区别是:
OutputStreams 用于二进制数据。Writers(包括 PrintWriter)用于文本数据
PrintWriter
将所有内容转换为 Ascii 格式。例如:
PrintWriter pw = new PrintWriter(new File("./test.txt"));
for (Integer word: words) {
pw.println(word);
}
在这段代码中,通过调用pw.printin(word)
; 无论单词是什么类型(这里是整数),程序都会将其转换为 ASCII 格式并存储起来。结果,当我们想要检索存储的数据并再次读取它时,程序必须执行另一种类型从文本到原始格式的更改!- 这在时间效率方面不好!例如,如果那个单词是一个整数,在将它存储到一个文件(现在是文本)之后,程序在检索它时必须将它的格式从字符串更改为整数!
但是,DataOutPutStream
因为它通过保持数据类型将数据存储为字节,所以一切都变得更加容易。因此,当我们运行下面的块时,程序将整数存储为字节,并且当它想要检索它不需要任何类型更改时。它以整数形式存储,也以整数形式检索。所以,它要快得多!
DataOutputStream dos = new DataOutputStream(
new FileOutputStream(new File("test2.txt")));
for (Integer word: words) {
dos.writeUTF(word);
}
dos.close();
两者都是 java.ioDataOutputStream
中PrintWriter
的两个类。
class DataOutputStream extends FilterOutputStream implements DataOutput {
}
Javadoc
说
“数据输出流允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后应用程序可以使用数据输入流将数据读回。”
public class PrintWriter extends Writer {
}
将对象的格式化表示打印到文本输出流。此类实现了 PrintStream 中的所有打印方法。它不包含写入原始字节的方法,程序应该使用未编码的字节流。