-1
好吧,所以我试图用套接字发送文件。这是我在服务器端得到的代码。问题是,如果我让这段代码运行,我会得到一些奇怪的输出喜欢丢失的字节。我试图在if语句中添加thread.sleep(),这似乎有助于解决某些问题,并且只会在处理较大的文件时出现问题。我也尝试在行缓冲区中放置一个断点= setbuffersize(binaryData,i,in);所以我在每个文件后停止。这似乎有助于解决问题。所以我想问题是即使没有什么可读的代码也会继续读取(客户端已经有时间发送它)。我不确定如何解决这个问题。我试图检查BUFFER_SIZE是否与in.available()一样大,但似乎在一段时间后停止发送并且从未到达BUFFER_SIZE。在inputstream中获取损坏的数据.read
那么如何让代码等待数据传输,然后再尝试读取呢?
while (byteRead != -1) {
commandlengh = msg.length();
binaryData = new byte[Integer.parseInt(ParameterValues.get(ParameterValues.size() - 1))];
in.read();
byte[] buffer = setbuffersize(binaryData, i, in);
while (in.read(buffer) != -1) {
for (int j = 0; j < buffer.length; j++) {
binaryData[i] = buffer[j];
i++;
}
buffer = setbuffersize(binaryData, i, in);
if(buffer.length == 0)
{
Parameters.clear();
ParameterValues.clear();
i = 0;
commandlengh = 0;
break;
}
}
byteRead = in.read();
}
private byte[] setbuffersize(byte[] binaryData, int i, InputStream in) throws IOException
{
int BUFFER_SIZE = 65536;
if(binaryData.length - i < BUFFER_SIZE)
{
BUFFER_SIZE = binaryData.length - i;
}
else
{
BUFFER_SIZE = 65536;
}
byte[] buffer = new byte[BUFFER_SIZE];
return buffer;
}