Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在inputstream.read中获取损坏的数据_Java_Sockets_Inputstream - Fatal编程技术网

Java 正在inputstream.read中获取损坏的数据

Java 正在inputstream.read中获取损坏的数据,java,sockets,inputstream,Java,Sockets,Inputstream,好的,我正在尝试用套接字发送文件。这是我在服务器端得到的代码。问题是,如果我让这段代码运行,我会得到一些奇怪的输出,比如缺少字节。我尝试在if语句中添加thread.sleep(),这似乎有一些帮助,并且只在处理较大文件时才出现问题。我还尝试在buffer=setbuffersize(binaryData,I,in)行上放置一个断点;所以我在每个文件之后都停了下来。这似乎有助于解决问题。所以我想问题是,即使没有什么可读的东西,代码也会继续读取(客户端还没有时间发送它)。我真的不知道如何解决这个问

好的,我正在尝试用套接字发送文件。这是我在服务器端得到的代码。问题是,如果我让这段代码运行,我会得到一些奇怪的输出,比如缺少字节。我尝试在if语句中添加thread.sleep(),这似乎有一些帮助,并且只在处理较大文件时才出现问题。我还尝试在buffer=setbuffersize(binaryData,I,in)行上放置一个断点;所以我在每个文件之后都停了下来。这似乎有助于解决问题。所以我想问题是,即使没有什么可读的东西,代码也会继续读取(客户端还没有时间发送它)。我真的不知道如何解决这个问题。我试图检查缓冲区大小是否与.available()中的一样大,但它似乎在一段时间后停止发送,并且从未达到缓冲区大小

那么,如何让代码在尝试读取数据之前等待数据传输呢

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;
}
while(byteRead!=-1){
commandlengh=msg.length();
binaryData=新字节[Integer.parseInt(ParameterValues.get(ParameterValues.size()-1));
in.read();
字节[]缓冲区=setbuffersize(二进制数据,i,in);
while(在读(缓冲区)!=-1){
对于(int j=0;j
您忽略了read()返回的计数,并假设它已填充缓冲区。检查Javadoc。不需要这样做

我不能理解你的代码。从套接字读取数据不需要所有这些。只需调用read,检查结果是否为-1;如果是,停止;否则,处理缓冲区的字节0..count-1