gpt4 book ai didi

Java 套接字损坏 PNG-图像

转载 作者:行者123 更新时间:2023-12-02 04:59:14 26 4
gpt4 key购买 nike

我目前正在尝试使用套接字将 PNG 或 JPEG 图像从一个客户端发送到另一个客户端(在 Java 中),但图像总是损坏(当我尝试打开它时,它只是说无法打开)因为它已损坏、有缺陷或太大)。我已经尝试过将图像加载到 byte[] 中的方法,如果我只是将图像加载到 byte[] 中然后将其保存回来,它可以完美工作,因此问题一定出在 byte[] 的发送中。以下是我用于发送的函数:

/**
* Attempts to send data through the socket with the BufferedOutputStream. <p>
* Any safety checks should be done beforehand
* @param data - the byte[] containing the data that shall be sent
* @return - returns 'true' if the sending succeeded and 'false' in case of IOException
*/
public boolean sendData(byte[] data){
try {
//We simply try to send the data
outS.write(data, 0, data.length);
outS.flush();
return true; //Success
} catch (IOException e) {
e.printStackTrace();
return false; //Failed
}
}

/**
* Attempts to receive data sent to the socket. It uses a BufferedInputStream
* @param size - the number of bytes that should be read
* @return - byte[] with the received bytes or 'null' in case of an IOException
*/
public byte[] receiveData(int size){
try {
int read = 0, r;
byte[] data = new byte[size];
do{
//We keep reading until we have gotten all data
r = inS.read(data, read, size-read);
if(r > 0)read += r;
}while(r>-1 && read<size); //We stop only if we either hit the end of the
//data or if we have received the amount of data we expected
return data;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

到达的图像似乎大小正确,因此数据至少到达了,只是损坏了。

最佳答案

扔掉您的 receiveData() 方法并使用 DataInputStream.readFully()

关于Java 套接字损坏 PNG-图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com