相关疑难解决方法(0)

我是否需要关闭()FileReader和BufferedReader?

我正在使用围绕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调用此方法,我想确保不打开任何句柄.

java io filereader bufferedreader

179
推荐指数
5
解决办法
15万
查看次数

将输入流连接到输出流

java9中的更新:https://docs.oracle.com/javase/9​​/docs/api/java/io/InputStream.html#transferTo-java.io.OutputStream-

我看到了一些相似的,但不是我需要的线程.

我有一个服务器,它基本上从客户端,客户端A接收输入,并逐字节转发到另一个客户端,客户端B.

我想将客户端A的输入流与客户端B的输出流连接起来.这可能吗?有什么方法可以做到这一点?

此外,这些客户端正在发送彼此有时间敏感的消息,因此缓冲不会.我不想要500的缓冲区和客户端发送499个字节,然后我的服务器在转发500个字节时保持关闭,因为它没有收到填充缓冲区的最后一个字节.

现在,我正在解析每条消息以找到它的长度,然后读取长度字节,然后转发它们.我想(并测试)这比读取一个字节并反复转发一个字节更好,因为这将非常慢.我也不想使用缓冲区或计时器,因为我在上一段中说过 - 我不希望消息等待很长时间才能通过,因为缓冲区未满.

这样做的好方法是什么?

java inputstream outputstream

72
推荐指数
6
解决办法
11万
查看次数

Java writeObject()总是覆盖现有对象,永远不会追加?

我想使用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; 有没有办法只覆盖文件中的任何内容,因此只保留一个对象?

java file-io object

1
推荐指数
1
解决办法
6639
查看次数