PrintWriter和DataOutputStream有什么区别?

我正在为Android的聊天室应用程序工作。 我读了不同的教程; 其中一些使用PrintWriter发送数据,其中一些使用DataOutputStream。 这两者有什么区别? 哪个更适合聊天应用?

来自java文档

DataOutputStream允许应用程序以可移植的方式将原始Java数据类型写入输出流。 然后,应用程序可以使用数据输入流来重新读取数据。

PrintWriter将对象的格式化表示forms打印到文本输出流。 此类实现PrintStream中的所有打印方法。 它不包含写入原始字节的方法,程序应使用未编码的字节流。

在一句话中,区别在于:

OutputStreams用于二进制数据。 作家(包括PrintWriter)用于文本数据

PrintWriter将所有内容转换为Ascii格式。 例如:

 PrintWriter pw = new PrintWriter(new File("./test.txt")); for (Integer word: words) { pw.println(word); } 

在这段代码中,通过调用pw.printin(word) ; 无论字的类型是什么(这里是整数),程序都将其转换为ASCII格式并存储它。 因此,当我们想要检索存储的数据并再次读取它时,程序必须执行另一种从文本格式转换为原始格式的类型! – 在时间效率方面不是很好! 例如,如果该单词是一个整数,在将其存储到文件(现在是文本)之后,程序必须在将要检索它时将其格式从String更改为整数!

但是, DataOutPutStream使一切变得更加容易,因为它通过保持数据类型将数据存储为字节。 因此,当我们运行波纹管块时,程序存储整数作为字节,当它想要检索它不需要任何类型的更改。 它存储为整数并检索为整数。 所以,它要快得多!

 DataOutputStream dos = new DataOutputStream( new FileOutputStream(new File("test2.txt"))); for (Integer word: words) { dos.writeUTF(word); } dos.close(); 

DataOutputStreamPrintWriter都是PrintWriter中的两个类。

 class DataOutputStream extends FilterOutputStream implements DataOutput { } 

Javadoc

“数据输出流允许应用程序以可移植的方式将原始Java数据类型写入输出流。然后,应用程序可以使用数据输入流来重新读取数据。”

  public class PrintWriter extends Writer { } 

将对象的格式化表示打印到文本输出流。 此类实现PrintStream中的所有打印方法。 它不包含写入原始字节的方法,程序应使用未编码的字节流。