Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ByteBuffer-编码字符串和put与字符集编码之间的差异?_Java_Nio_Bytebuffer - Fatal编程技术网

Java ByteBuffer-编码字符串和put与字符集编码之间的差异?

Java ByteBuffer-编码字符串和put与字符集编码之间的差异?,java,nio,bytebuffer,Java,Nio,Bytebuffer,我有两种不同的方法从字符串创建ByteBuffer对象: 使用ByteBuffer.putbyte[]方法从字符串获取字节[]: 使用Charset.encodeString方法: 在问题的最后,我试图使用完整的代码发送一个简单的HTTP响应。使用respWithPut,我在客户机上得到损坏的响应,而respFromChar工作正常 我在这方面做错了什么 完整的示例代码: 要进行示例请求,请使用:curl-vhttp://localhost:8080/.字节缓冲符有一个指示下一个字节应该从何处读

我有两种不同的方法从字符串创建ByteBuffer对象:

使用ByteBuffer.putbyte[]方法从字符串获取字节[]: 使用Charset.encodeString方法: 在问题的最后,我试图使用完整的代码发送一个简单的HTTP响应。使用respWithPut,我在客户机上得到损坏的响应,而respFromChar工作正常

我在这方面做错了什么

完整的示例代码:

要进行示例请求,请使用:curl-vhttp://localhost:8080/.

字节缓冲符有一个指示下一个字节应该从何处读取的符号。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方法需要调用,以确保缓冲区的位置指向刚刚放入的数据

在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