Java 从字节[]到字符串的精确转换

Java 从字节[]到字符串的精确转换,java,string,file,bytearray,Java,String,File,Bytearray,数组byte[]包含照片的一个完美的逐字节副本,当我尝试将byte[]转换为字符串并用它写入文件时,它失败了 我需要转换为字符串,以便稍后通过套接字发送 我的每个连接的处理程序都有一个套接字(sock)、PrintWriter(out)和BufferedReader(in),然后我将套接字与PrintWriter和BufferedReader相关联。通过这个,我发送和接收带有out.println和in.readLine的字符串 我怎样才能解决这个问题 测试代码: // getPhoto() r

数组byte[]包含照片的一个完美的逐字节副本,当我尝试将byte[]转换为字符串并用它写入文件时,它失败了

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

我的每个连接的处理程序都有一个套接字(sock)、PrintWriter(out)和BufferedReader(in),然后我将套接字与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();
数组byte[]包含照片的一个完美的逐字节副本,当我尝试将byte[]转换为字符串并用它写入文件时,它失败了

对。这是因为字符串是文本,而照片不是文本。只是不要将其转换为字符串。您也不需要
数据输出流

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

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

我不明白为什么要将表示照片的字节数组转换为字符串。请解释。编辑,我希望它通过套接字发送字符串,使用println。相反,使用
os.write(getPhoto())
。我很好奇,尽管这是个坏主意:如果他将字节数组转换为逗号分隔的值字符串,将其写入文件,通过解析单个值将其读回字节数组,那会把他的图像还给他,不是吗?@G.Bach:是的,但是如果以后没有额外的转换,它将不是一个有效的图像文件。它也比预期的要大:)我需要转换成字符串,因为以后我想通过套接字(println)发送它。@Facon:为什么要将
println
与套接字一起使用?套接字基于二进制数据。