【发布时间】:2011-12-08 07:29:07
【问题描述】:
我可以在同一个输出流上同时使用 PrintWriter 和 BufferedOutputStream 吗?
情况是这样的:
我有一个 SSLSocket 程序,我希望能够在不同的时间点轻松地通过套接字传输字符串和字节 [],而不必将字节 [] 转换为字符串等,但是,PrintWriter 只允许我传输字符串和 BufferedOutputStream 只允许我传输字节。
【问题讨论】:
我可以在同一个输出流上同时使用 PrintWriter 和 BufferedOutputStream 吗?
情况是这样的:
我有一个 SSLSocket 程序,我希望能够在不同的时间点轻松地通过套接字传输字符串和字节 [],而不必将字节 [] 转换为字符串等,但是,PrintWriter 只允许我传输字符串和 BufferedOutputStream 只允许我传输字节。
【问题讨论】:
我会使用 DataOutputStream(可能包装一个 BufferedOutputStream)。它允许您传输byte[]、int、doubleString 和许多其他类型。要发送byte[],您可能需要先发送长度为int 或short。
【讨论】:
PrintWriter 只是原始 OutputStream 的包装器。 BufferedOutputStream 也是 OutputStream 的包装器。 所以你可以同时使用两者。为什么不呢?
您应该考虑的一件事 - 您应该小心在多线程环境中同时使用流和编写器,因为您可能会得到不可预测的结果。
java.io.Writer 类(PrintWriter 的超类)将自身用作锁定对象。所以你也可以用它来同步多个线程。
【讨论】:
没关系,但您必须确保以正确的顺序冲洗它们。您也可以在BufferedOutputStream 之上使用PrintWriter。
【讨论】: