我正在使用围绕FileReader的BufferedReader读取本地文件:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();
Run Code Online (Sandbox Code Playgroud)
我需要close()的FileReader为好,或将包装处理这个问题?我见过人们这样做的代码:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();
Run Code Online (Sandbox Code Playgroud)
从servlet调用此方法,我想确保不打开任何句柄.
java9中的更新:https://docs.oracle.com/javase/9/docs/api/java/io/InputStream.html#transferTo-java.io.OutputStream-
我看到了一些相似的,但不是我需要的线程.
我有一个服务器,它基本上从客户端,客户端A接收输入,并逐字节转发到另一个客户端,客户端B.
我想将客户端A的输入流与客户端B的输出流连接起来.这可能吗?有什么方法可以做到这一点?
此外,这些客户端正在发送彼此有时间敏感的消息,因此缓冲不会.我不想要500的缓冲区和客户端发送499个字节,然后我的服务器在转发500个字节时保持关闭,因为它没有收到填充缓冲区的最后一个字节.
现在,我正在解析每条消息以找到它的长度,然后读取长度字节,然后转发它们.我想(并测试)这比读取一个字节并反复转发一个字节更好,因为这将非常慢.我也不想使用缓冲区或计时器,因为我在上一段中说过 - 我不希望消息等待很长时间才能通过,因为缓冲区未满.
这样做的好方法是什么?
我想使用Hashtable将Hashtable序列化为文件ObjectOutputStream.writeObject(),但我希望编写器始终覆盖任何现有对象,以便只存在单个对象:
FileOutputStream fout = new FileOutputStream( f);
ObjectOutputStream writer = new ObjectOutputStream(fout);
writer.writeObject( hashtable);
writer.flush();
Run Code Online (Sandbox Code Playgroud)
hastable在运行时间歇性更新,因此我使用辅助方法来保持其状态:
private void persistObject( Hashtable ht){
writer.writeObject( ht);
writer.flush();
}
Run Code Online (Sandbox Code Playgroud)
问题是我每次打电话writeObject(),都会在文件中附加一个新的hastable; 有没有办法只覆盖文件中的任何内容,因此只保留一个对象?