PrintWriter和byte[]问题

3
byte[] data = (byte[])opBinding.execute();
PrintWriter out = new PrintWriter(outputStream);    
out.println(data);
out.flush();
out.close(); 

但是我得到了@84654而不是文本。我怎样才能将byte[]添加到PrintWriter中?我需要byte[]而不是字符串,因为我在处理čćžšđ时遇到了编码问题。


1
你知道你的 byte[] 数据使用的编码是什么吗?如果知道,你可以使用 String foo = new String(data, "UTF-8") 或类似的方法。 - clstrfsck
1
无需使用 flush(),仅需使用 close() 即可。 - Eng.Fouad
有时使用utf-8,有时使用windows-1250。因此我将文本存储到blob中,然后将其读入字节。 - senzacionale
5个回答

14

您可以直接使用outputstream编写字节。

outputStream.write(byte[] b);

4
PrintWriter是用于处理文本数据而非二进制数据。
看起来你可能需要将你的byte[]转换为一个String,然后将该字符串输出 - 假设你写入的PrintWriter使用了支持你所需字符的编码。
此外,你还需要知道原始文本数据在byte[]中所采用的编码方式,才能成功地进行文本转换。

2
问题在于,您的代码在将结果返回给println语句之前(隐式地)调用了data.toString()

1

试一下这个

byte[] data = (byte[])opBinding.execute();
PrintWriter out = new PrintWriter(outputStream);    
out.println(new String(data));
out.flush();
out.close(); 

这个没问题,但是接下来会出现编码问题。 - senzacionale

-1

这对我有用...当我使用时

PrintWriter out=new PrintWriter(System.out);

同时,它使用toString()方法将字节数据转换为字符串。这可能是您编码问题的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接