我想这是这个问题的输入对应部分,我问了一些时间:
Can I use both PrintWriter and BufferedOutputStream on the same outputstream?
Q1)我需要从同一个输入流中读取String行和byte []。那么我可以使用扫描仪包装器首先读取行,然后直接使用输入流来读取byte []吗?会引起冲突吗?
Q2)如果没有对扫描仪对象的更多引用并且它被垃圾收集,它会自动关闭连接吗?
Q3)如果第一个问题的答案是肯定而第二个问题的答案是否定的,那么一旦我完成了阅读,我只需要调用inputstream.close()而不是Scanner吧? (因为到那时我将不再拥有扫描仪对象的句柄了)
答案 0 :(得分:1)
对于1),您始终可以使用您选择的编码读取字节并将其转换为String。我很确定这是所有读者和#34;在引擎盖下。
对于2),不,Scanner
课程不会覆盖finalize
方法,所以我非常确定它不会关闭句柄(它真的不应该&# #39; T)。有效Java书中关于终结器的部分有关于该主题的详细说明。
对于3),关闭Scanner
将自动关闭基础流。我很确定这几乎是所有I / O类处理传入的文件/资源句柄的方式。
答案 1 :(得分:1)
Q1)是的,扫描器会缓冲其输入,因此当您切换到不同的流时,可能会消耗您想要的一些字节。
如果您可以使用扫描仪读取字节,那么这是一个更好的选择。
Q2)连接将在清理时关闭。
Q3)您只需关闭输入流,因为Scanner是纯Java对象(和输入)对于缓冲输出,您需要调用flush()或close()以确保发送未写入的数据。