Java 中 ByteBuffer 转 String,eclipse编译 无内容 ,javac 编译运行有内容
代码如下:importjava.io.UnsupportedEncodingException;importjava.nio.ByteBuffer;importjava....
代码如下:
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class Test {
public static String getString(ByteBuffer buffer)
{
Charset charset = null;
CharsetDecoder decoder = null;
CharBuffer charBuffer = null;
try
{
charset = Charset.forName("UTF-8");
decoder = charset.newDecoder();
// charBuffer = decoder.decode(buffer);//用这个的话,只能输出来一次结果,第二次显示为空
charBuffer = decoder.decode(buffer.asReadOnlyBuffer());
return charBuffer.toString();
}
catch (Exception ex)
{
ex.printStackTrace();
return "error";
}
}
public static void main(String args[]) throws UnsupportedEncodingException{
ByteBuffer b=ByteBuffer.allocate(4);
b.putChar('c');
b.putChar('d');
b.position(0);
String result=getString(b);
System.out.println("result");
System.out.println(result);
}
}
正常结果应为:
result
cd
eclipse 结果为:
result
eclipse 中的jdk版本确认是与terminal一致的
解决了追加分:) 展开
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class Test {
public static String getString(ByteBuffer buffer)
{
Charset charset = null;
CharsetDecoder decoder = null;
CharBuffer charBuffer = null;
try
{
charset = Charset.forName("UTF-8");
decoder = charset.newDecoder();
// charBuffer = decoder.decode(buffer);//用这个的话,只能输出来一次结果,第二次显示为空
charBuffer = decoder.decode(buffer.asReadOnlyBuffer());
return charBuffer.toString();
}
catch (Exception ex)
{
ex.printStackTrace();
return "error";
}
}
public static void main(String args[]) throws UnsupportedEncodingException{
ByteBuffer b=ByteBuffer.allocate(4);
b.putChar('c');
b.putChar('d');
b.position(0);
String result=getString(b);
System.out.println("result");
System.out.println(result);
}
}
正常结果应为:
result
cd
eclipse 结果为:
result
eclipse 中的jdk版本确认是与terminal一致的
解决了追加分:) 展开
3个回答
展开全部
我不确定javac编译有内容是怎么回事,但是加上你注释那一行之后没有cd是应该的。因为你每次call decode,你的buffer会被从position开始完整的遍历一遍,当遍历完之后,buffer中的position会被置为4(在你的程序中). 当一个position已经是最后一位的buffer再次被扔给decode 方法,返回的自然就是一个没有内容的charBuffer了。
想打出cd,你可以在注释那行后面加一行,
buffer.position(0); 重置position
想打出cd,你可以在注释那行后面加一行,
buffer.position(0); 重置position
2016-02-24 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
实际项目中会用到ByteBuffer进行数据的传输,因此会用涉及到将ByteBuffer转换为String的过程。
以下是实现该过程的方法:
public static String byteBufferToString(ByteBuffer buffer) {
CharBuffer charBuffer = null;
try {
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
charBuffer = decoder.decode(buffer);
buffer.flip();
return charBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
需要说明的是,flip方法会将缓冲区的当前位置”重置”到缓冲区的开始处.这样可以保证传入的对像被其他方法使用时读取的数据完整性.
以下是实现该过程的方法:
public static String byteBufferToString(ByteBuffer buffer) {
CharBuffer charBuffer = null;
try {
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
charBuffer = decoder.decode(buffer);
buffer.flip();
return charBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
需要说明的是,flip方法会将缓冲区的当前位置”重置”到缓冲区的开始处.这样可以保证传入的对像被其他方法使用时读取的数据完整性.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-04-11
展开全部
charBuffer new一下,不要等于null,试试
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |