【发布时间】:2011-02-16 19:28:03
【问题描述】:
我们正在努力减少延迟并提高用 Java 编写的进程的性能,该进程通过 BufferedReader 类的 readLine() 方法从套接字消费数据(xml 字符串)。数据由行尾分隔符 (\n) 分隔,每行可以是可变长度(6KBits - 32KBits)。我们的代码如下所示:
Socket sock = connection;
InputStream in = sock.getInputStream();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(in));
...
do
{
String input = inputReader.readLine();
// Executor call to parse the input thread in a seperate thread
}while(true)
所以我有几个问题:
- inputReader.readLine() 方法会在遇到 \n 字符时立即返回,还是会等到缓冲区已满?
- 是否有更快的数据采集速度 从插座比使用 缓冲阅读器?
- 当输入字符串的大小小于 Socket 的接收缓冲区大小时会发生什么?
- 当 输入字符串大于大小 Socket 的接收缓冲区?
我正在(慢慢地)掌握 Java 的 IO 库,因此非常感谢任何指针。
谢谢!
【问题讨论】:
-
我猜您使用的是特定于应用程序的格式 - 换行符和空格在 XML 中通常不重要。
-
是的,抱歉应该更清楚。我们通过 TCP 连接使用来自外部应用程序的流数据。每个 XML 消息都由一个 \n 字符分隔。我想这与按顺序读取文件相同,其中每一行都是完整的 xml 文档。