Lia*_*aas 7 java bytebuffer bytearray
我有一个byte[] bytes从ByteBuffer其中包含一个数据包.我想把数据包放入String.
目前我有以下内容
byte[] bytes = packet.array();
System.out.println("Packet String:" + new String(bytes));
Run Code Online (Sandbox Code Playgroud)
但后来我得到了以下输出
Packet String:E????<?@??@?.
03-22 04:30:28.187 9296-10152/willem.com.vpn I/System.out? ????J}?j???k?:??????????9???????
03-22 04:30:28.197 9296-10152/willem.com.vpn I/System.out? ??&?4????????ddrarpa??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我用这样的编码尝试过它
System.out.println("Packet String:" + new String(bytes, Charset.forName("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
但那不是正确的字符集.任何人都可以告诉我什么是?
您需要使用缓冲区的位置和限制来确定要读取的字节数.
// ...populate the buffer...
buffer.flip(); // flip the buffer for reading
byte[] bytes = new byte[buffer.remaining()]; // create a byte array the length of the number of bytes written to the buffer
buffer.get(bytes); // read the bytes that were written
String packet = new String(bytes);
Run Code Online (Sandbox Code Playgroud)
在我看来,你根本不应该真正使用支持array(); 这是不好的做法.直接字节缓冲区(由ByteBuffer.allocateDirect()没有后备数组创建,并在您尝试调用时会抛出异常ByteBuffer.array().因此,为了便于携带,您应该尝试坚持使用标准缓冲区get和put方法.当然,如果您真的想要使用可用于ByteBuffer.hasArray()检查缓冲区是否具有后备阵列的数组.
您忽略了limit缓冲区的。你应该flip()缓冲,然后调用
new String(buffer.array(), 0, buffer.position())
Run Code Online (Sandbox Code Playgroud)
然后重置它。
但你确实应该使用解码器来为此Charset生成一个。CharBuffer至少你应该为String构造函数指定一个字符集。
| 归档时间: |
|
| 查看次数: |
14795 次 |
| 最近记录: |