java ByteArrayOutputStream。toString()正在提供一个垃圾值
我有以下代码行:
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.writeTo(FILE);
由于对文件的某些限制,我们将把输出写入记录器,以便其他服务可以使用数据,因此我的代码更改为:
logger.info(baos.toString());
问题是它也给出了一些垃圾值,并且两个代码的输出不一样。我如何确保baos.toString()
将给我与baos.writeTo(FILE)
相同的结果
以下是快照:
普雷斯托·克雷洛格。日志显示输出boas.toString()
并检查。记录baos.writeTo(FILE);
编写代码
private SpecificDatumWriter<UQLMetrics> datumWriter = new SpecificDatumWriter<>(Metrics.getClassSchema());
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
datumWriter.write(metrics, encoder);
encoder.flush();
# 1 楼答案
这可能与文件使用的^{} 编码有关,而系统默认值(^{} )由^{} 用于创建字符串
对两者使用相同的字符集,您将获得相同的输出
^{} 不知道有关字符集的信息。它处理二进制数据
可以使用^{} 指定用于创建流中字符串的字符集。
字符集应该是您的数据编码中的任何一个
# 2 楼答案
方法
toString()
使用平台的默认字符集将缓冲区的内容转换为字符串解码字节。这不是你想要的您需要知道将信息写入输出流的字符集,然后使用方法
public String toString(String charsetName)
,以便使用正确的字符集构造字符串在过去,当诊断编码问题时,这个实用程序对我帮助很大。它是一个转换器,可以将任何字符串转换为Unicode序列,反之亦然。它是我的开源MgntUtils库的一部分
下面是一个代码示例:
产出将是:
因此,我建议您将试图编写的文本作为字符串,并将其转换为Unicode序列。然后检查序列是否与正在写入的字节相同。如果它们是相同的,那么您使用的是UTF-8
下面是类StringUnicodeEncoderDecoder的Javadoc。该库可以作为Maven工件here获得,也可以通过源代码和Javadoc在GitHub上获得