在Java中不使用new运算符将字节数组转换为字符串

raj*_*hav 5 java arrays string performance

除了使用之外,还有其他方法可以将字节数组转换为字符串吗 new String(bytearray)?确切的问题是我通过UDP连接在网络上传输json格式的字符串。在另一端,我在固定大小的字节数组中接收它(因为我不知道数组大小)并从字节数组中创建一个新字符串。如果我这样做,我分配的整个内存就变得不必要了。

为了避免这种情况,我将字节数组将其转换为字符串,截断字符串直到最后一个有效字符,然后将其转换为字节数组并从中创建一个新字符串。如果我这样做,它只会耗尽所需的内存,但垃圾收集频率会变得如此之高,因为它涉及更多数量的分配。做这个的最好方式是什么?

Mic*_*urr 2

会像这样:

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)

话又说回来,这可能是不必要的。