raj*_*hav 5 java arrays string performance
除了使用之外,还有其他方法可以将字节数组转换为字符串吗 new String(bytearray)?确切的问题是我通过UDP连接在网络上传输json格式的字符串。在另一端,我在固定大小的字节数组中接收它(因为我不知道数组大小)并从字节数组中创建一个新字符串。如果我这样做,我分配的整个内存就变得不必要了。
为了避免这种情况,我将字节数组将其转换为字符串,截断字符串直到最后一个有效字符,然后将其转换为字节数组并从中创建一个新字符串。如果我这样做,它只会耗尽所需的内存,但垃圾收集频率会变得如此之高,因为它涉及更多数量的分配。做这个的最好方式是什么?
会像这样:
String s = new String( bytearray, 0, lenOfValidData, "US-ASCII");
Run Code Online (Sandbox Code Playgroud)
做你想做的事(将字符集更改为任何合适的编码)?
更新:
根据您的评论,您可能想尝试:
socket.receive(packet);
String strPacket = new String( packet.getData(), 0, packet.getLength(), "US-ASCII");
receiver.onReceive( strPacket);
Run Code Online (Sandbox Code Playgroud)
我对 Java 的数据报支持不够熟悉,不知道是否packet.getLength()返回数据报的截断长度或原始长度(在截断以适合接收缓冲区之前)。像这样创建字符串可能更安全:
String strPacket = new String( packet.getData(),
0,
Math.min( packet.getLength(), packet.getData().length),
"US-ASCII");
Run Code Online (Sandbox Code Playgroud)
话又说回来,这可能是不必要的。