【问题标题】:Exact conversion from byte[] to String从 byte[] 到 String 的精确转换
【发布时间】:2013-02-07 18:26:15
【问题描述】:

Array byte[] 包含照片的完美逐字节副本,当我尝试将 byte[] 转换为 String 并使用它写入文件时,它失败了。

我需要转换为字符串以便稍后通过套接字发送。

我的每个连接的处理程序都有一个 Socket (sock)、PrintWriter (out) 和 BufferedReader (in),然后我将 Socket 关联到 PrintWriter 和 BufferedReader。有了这个,我用 out.println 和 in.readLine 发送和接收字符串。

我该如何解决这个问题?

测试代码:

// getPhoto() returns byte[]
String photo = new String(getPhoto());

// Create file
DataOutputStream os = new DataOutputStream(new FileOutputStream("out1.jpg"));
// This makes imperfect copy of the photo
os.writeBytes(photo);

//This works perfectly basically it copies the image through byte[]
//os.write(getPhoto());

// Close the output stream
os.close();

【问题讨论】:

  • 我不明白您为什么要将表示照片的字节数组转换为字符串。请解释一下。
  • 已编辑,我希望它通过套接字发送字符串,使用 println。

标签: java string file bytearray


【解决方案1】:

Array byte[] 包含照片的完美逐字节副本,当我尝试将 byte[] 转换为 String 并使用它写入文件时,它失败了。

是的。那是因为字符串用于文本,而照片不是文本。只是不要将其转换为字符串。你也不需要DataOutputStream

OutputStream os = new FileOutputStream("out1.jpg");
try {
    os.write(getPhoto());
} finally {
    os.close();
}

【讨论】:

  • 改为使用os.write(getPhoto())
  • 我很好奇,尽管这是一个坏主意:如果他将他的字节数组转换为逗号分隔的值字符串,将其写入文件,然后通过解析个人将其读回字节数组价值观,那会让他恢复他的形象,不是吗?
  • @G.Bach:是的,但如果没有稍后的额外转换,它就不是一个有效的图像文件。它也会比预期的要大:)
  • 我需要转换成字符串,因为稍后我想通过套接字(println)发送它。
  • @Facon:你为什么要使用println 和套接字?套接字基于 二进制 数据。
【解决方案2】:

不要将二进制数据加载到字符串中。如果不是tetx,就不要使用String

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2012-04-30
    • 2012-01-02
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多