如何在Java中将字节编码为字符串

时间:2012-07-11 17:24:45

标签: java string byte encode

我正在尝试将输入流中的字节编码为纯文本字符。所以,我用空格分隔了整个字符串,如下所示:

InputStream in;
//etc
int b;
String finalString="";
while((b=in.read())!=-1)finalString+=""+b+" ";
in.close()

但问题是,这使得字符串比原始字节大3-4倍。有没有其他方法将字节编码为纯文本?

6 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望将二进制数据转换为纯文本。您应该使用Base64。损失因子只有4/3。

Apache commons-codec具有Base64编码器(和解码器)的免费实现。

另一种可能性是Hex编码(commons-codec也支持),但是对于二进制数据的每个字节,它需要2个字节的文本。

答案 1 :(得分:1)

如果你可以把它全部变成一个byte[],那么这应该只是

new String(byteArray, StandardCharsets.UTF_16LE);

或您希望输入使用的任何字符编码。

答案 2 :(得分:1)

您可以获取所有字节并将它们输出为字节数组,然后使用字节数组创建字符串。

String newString = new String(byteArray);

答案 3 :(得分:1)

您当前的解决方案生成的字符串比文件中的字符串长3到4倍,因为它将十进制字符代码连接成一个字符串。

Java提供了一种从流中读取字符串的方法,而无需编写循环,如下所示:

InputStream in;
BufferedReader r = new BufferedReader(new InputStreamReader(in, "UTF8"));
String s = r.readLine();

答案 4 :(得分:1)

按照文档here

进行操作

例如,如果您的字符串是UTF8:

byte[] bytes = // you got that from somewhere...
String x = new String(bytes, "UTF8");

答案 5 :(得分:1)

Commons-codec有methods将字节编码为Base64编码。

encodedText = new String(
                 org.apache.commons.codec.binary.Base64.encodeBase64(byteArray));