我想将Java String str转换为byte[] b具有以下特征:
b是一个有效的C字符串(即它有b.length = str.length() + 1和b[str.length()] == 0.b通过在转换字符获得的str8位ASCII字符.最有效的方法是什么 - 最好是现有的库函数?可悲的是,str.getBytes("ISO-8859-1")不符合我的第一个要求......
// do this once to setup
CharsetEncoder enc = Charset.forName("ISO-8859-1").newEncoder();
// for each string
int len = str.length();
byte b[] = new byte[len + 1];
ByteBuffer bbuf = ByteBuffer.wrap(b);
enc.encode(CharBuffer.wrap(str), bbuf, true);
// you might want to ensure that bbuf.position() == len
b[len] = 0;
Run Code Online (Sandbox Code Playgroud)
这需要分配几个包装器对象,但不会复制字符串字符两次.
你可以str.getBytes("ISO-8859-1")在最后用一个小技巧:
byte[] stringBytes=str.getBytes("ISO-8859-1");
byte[] ntBytes=new byte[stringBytes.length+1];
System.arraycopy(stringBytes, 0, ntBytes, 0, stringBytes.length);
Run Code Online (Sandbox Code Playgroud)
arrayCopy相对较快,因为在许多情况下它可以使用本机技巧和优化.新数组在我们没有覆盖它的地方填充空字节(基本上只是最后一个字节).
ntBytes 是你需要的阵列.
| 归档时间: |
|
| 查看次数: |
8451 次 |
| 最近记录: |