Java ByteBuffer-编码字符串和put与字符集编码之间的差异?
我有两种不同的方法从字符串创建ByteBuffer对象: 使用ByteBuffer.putbyte[]方法从字符串获取字节[]: 使用Charset.encodeString方法: 在问题的最后,我试图使用完整的代码发送一个简单的HTTP响应。使用respWithPut,我在客户机上得到损坏的响应,而respFromChar工作正常 我在这方面做错了什么 完整的示例代码: 要进行示例请求,请使用:curl-vhttp://localhost:8080/.字节缓冲符有一个指示下一个字节应该从何处读取的符号。respWithPut方法需要调用,以确保缓冲区的位置指向刚刚放入的数据 在ByteBuffer.allocate之后: 例如,使用长度为8的字节数组调用ByteBuffer.put后:Java ByteBuffer-编码字符串和put与字符集编码之间的差异?,java,nio,bytebuffer,Java,Nio,Bytebuffer,我有两种不同的方法从字符串创建ByteBuffer对象: 使用ByteBuffer.putbyte[]方法从字符串获取字节[]: 使用Charset.encodeString方法: 在问题的最后,我试图使用完整的代码发送一个简单的HTTP响应。使用respWithPut,我在客户机上得到损坏的响应,而respFromChar工作正常 我在这方面做错了什么 完整的示例代码: 要进行示例请求,请使用:curl-vhttp://localhost:8080/.字节缓冲符有一个指示下一个字节应该从何处读
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size
下一个ByteBuffer.get调用将读取索引8处的字节,该字节仍然为零,因为您没有使用put在那里添加任何数据
调用ByteBuffer.flip后,限制将为旧位置,新位置将为零,使任何现有数据都可以读取:
next get operation will read from here
↓
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size
ByteBuffer具有指示下一个字节应从何处读取的值。respWithPut方法需要调用,以确保缓冲区的位置指向刚刚放入的数据
在ByteBuffer.allocate之后:
例如,使用长度为8的字节数组调用ByteBuffer.put后:
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size
下一个ByteBuffer.get调用将读取索引8处的字节,该字节仍然为零,因为您没有使用put在那里添加任何数据
调用ByteBuffer.flip后,限制将为旧位置,新位置将为零,使任何现有数据都可以读取:
next get operation will read from here
↓
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size
ByteBuffer具有指示下一个字节应从何处读取的值。您的respWithPut方法需要调用,以确保缓冲区的位置指向您刚刚放入的数据。@VGR这应该是答案。谢谢:ByteBuffer有一个指示下一个字节应该从何处读取的标记。您的respWithPut方法需要调用,以确保缓冲区的位置指向您刚刚放入的数据。@VGR这应该是答案。谢谢:
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size
next get operation will read from here
↓
position limit
↓ ↓
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| … |_|
0 1 2 3 4 5 5 6 7 8 9 1 1 1 1 1 1 ↑
0 1 2 3 4 5 buffer size