gpt4 book ai didi

java - 使用 ByteBuffer 从 Socket 读取数据的更快方法?

转载 作者:行者123 更新时间:2023-12-02 06:01:01 25 4
gpt4 key购买 nike

我已经通过 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);
}

我知道字节缓冲区不是线程安全的,我不确定是否可以通过一次读取多个字节然后将其存储在缓冲区中来加快速度?我可以采取什么方法来加快这个过程?

最佳答案

使用批量读取而不是单字节读取。

byte[] buf = new byte[3200000];
int pos = 0;
while (pos < buf.length) {
int n = in.read(buf, pos, buf.length - pos);
if (n < 0)
break;
pos += n;
}
ByteBuffer buff = ByteBuffer.wrap(buf, 0, pos);

您可以get the SocketChannel,而不是从套接字获取InputStream并填充要包装的字节数组。和 read()直接到 ByteBuffer

关于java - 使用 ByteBuffer 从 Socket 读取数据的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com