使用二进制编码将byte []转换为String

fer*_*olo 4 java string character-encoding

我想将每个byte从a byte[]转换为a char,然后将这些chars放在String上.这是一些数据库的所谓"二进制"编码.到目前为止,我能找到的最好的是这个巨大的样板:

byte[] bytes = ...;
char[] chars = new char[bytes.length];
for (int i = 0; i < bytes.length; ++i) {
    chars[i] = (char) (bytes[i] & 0xFF);
}
String s = new String(chars);
Run Code Online (Sandbox Code Playgroud)

是否还有来自Java SE或Apache Commons的其他选项?我希望我能有这样的事情:

final Charset BINARY_CS = Charset.forName("BINARY");
String s = new String(bytes, BINARY_CS);
Run Code Online (Sandbox Code Playgroud)

但我不愿意写一个Charset和他们的编解码器(还).在JRE或Apache Commons中是否有这样的二进制Charset?

Pet*_*rey 9

您可以将ASCII编码用于7位字符

String s = "Hello World!";
byte[] b = s.getBytes("ASCII");
System.out.println(new String(b, "ASCII"));
Run Code Online (Sandbox Code Playgroud)

或8位ascii

String s = "Hello World! \u00ff";
byte[] b = s.getBytes("ISO-8859-1");
System.out.println(new String(b, "ISO-8859-1"));
Run Code Online (Sandbox Code Playgroud)

编辑

System.out.println("ASCII => " + Charset.forName("ASCII"));
System.out.println("US-ASCII => " + Charset.forName("US-ASCII"));
System.out.println("ISO-8859-1 => " + Charset.forName("ISO-8859-1"));
Run Code Online (Sandbox Code Playgroud)

版画

ASCII => US-ASCII
US-ASCII => US-ASCII
ISO-8859-1 => ISO-8859-1
Run Code Online (Sandbox Code Playgroud)