gpt4 book ai didi

java - 在 Java 中,到 "build"并逐个字符地使用字符串的最快方法是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 00:59:43 26 4
gpt4 key购买 nike

我有一个间歇性接收数据的 Java 套接字连接。每个突发接收到的数据字节数各不相同。数据可能会也可能不会以众所周知的字符(例如 CR 或 LF)终止。每个突发数据的长度是可变的。

我正在尝试从每个突发数据中构建一个字符串。构建稍后需要解析的字符串的最快方法是什么(速度,而不是内存)?

我首先使用字节数组来存储传入的字节,然后在每次突发时将它们转换为字符串,如下所示:

byte[] message = new byte[1024];
...
message[i] = //byte from socket
i++;
...
String messageStr = new String(message);
...
//parse the string here

这样做的明显缺点是有些突发可能比 1024 长。我不想随意创建更大的字节数组(如果我的突发更大怎么办?)。

这样做的最佳方法是什么?我应该创建一个 StringBuilder 对象并向其添加 append() 吗?这样我就不必从 StringBuilder 转换为 String(因为前者具有我需要的大部分方法)。

同样,执行速度是我最关心的问题。

TIA。

最佳答案

我可能会使用 InputStreamReader 包裹在 BufferedInputStream 周围,后者又包裹套接字。并编写一次处理一条消息的代码,可能会阻塞输入。如果输入是突发的,我可能会在后台线程上运行并使用并发队列来保存消息。

一次读取缓冲区并尝试将其转换为字符正是BufferedInputStream/InputStreamReader所做的。它在关注编码的同时这样做,这是您的解决方案所没有的(正如其他人所指出的)。

我不知道您为什么关注速度,但您会发现处理来自套接字的数据的时间远远少于通过该套接字传输数据所需的时间。

关于java - 在 Java 中,到 "build"并逐个字符地使用字符串的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565511/

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