我们正在努力减少延迟并提高用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)
Run Code Online (Sandbox Code Playgroud)
所以我有几个问题:
我正在使用Java的IO库(慢慢地)掌握,所以任何指针都非常受欢迎.
谢谢!
mdm*_*dma 15
inputReader.readLine()方法一旦命中\n字符就会返回,还是等到缓冲区满了?
从使用BufferedReader获取套接字数据的速度是否更快?
BufferedReader需要复制一些数据.您可以尝试NIO apis,它可以避免复制,但您可能需要在花费任何时间进行分析之前查看它是否真的是I/O是瓶颈.一个更简单的快速修复是BufferedInputStream在套接字周围添加一个,这样每次读取都不会到达套接字(不清楚InputStreamReader本身是否进行任何缓冲.)例如
new BufferedReader(new InputStreamReader(new BufferedInputStream(in)))
当输入字符串的大小小于Socket接收缓冲区的大小时会发生什么?
当输入字符串的大小大于Socket接收缓冲区的大小时会发生什么?
总而言之,BufferedReader仅在绝对必要时才会阻塞.
| 归档时间: |
|
| 查看次数: |
8505 次 |
| 最近记录: |