【发布时间】:2014-03-26 20:16:36
【问题描述】:
我已经通过 TCP 连接到一个不断发送大量数据的套接字,我需要读取这些数据。到目前为止,我所拥有的是一个字节缓冲区,它在 while 循环中逐字节读取。但是我现在使用的测试用例大约是3MB,逐字节读取需要一段时间。
这是我的解释代码:
ByteBuffer buff = ByteBuffer.allocate(3200000);
while(true)
{
int b = in.read();
if(b == -1 || buff.remaining() == 0)
{
break;
}
buff.put((byte)b);
}
我知道字节缓冲区不是线程安全的,我不确定是否可以通过一次读取多个字节然后将其存储在缓冲区中来加快速度?我有什么方法可以加快这个过程?
【问题讨论】:
-
你是否从多个线程读取同一个套接字?您是否将填充的缓冲区传递给另一个线程?你为什么要提到线程安全?
-
在任何语言中(我对 Java 知之甚少),如果您一次只处理读取数据 1 个字节,那么您做错了。读入块,一次处理 1 个字节。
-
@erickson 我没有使用线程。我说过,因为我在其他地方读过 ByteBuffers 不是线程安全的。但是是的,我正在从单个套接字读取。
-
@SanJacinto 这也是我的假设哈哈。您是否知道以字节为单位读取的某种标准。 (我的意思是我应该一次读多少字节到一个块中?有标准数量吗?)
-
这在很大程度上取决于您的应用程序。一般而言,您会在场景允许的情况下阅读尽可能多的内容,这因场景而异。
标签: java tcp bytebuffer