код, вероятно, не делает то, что вы думаете, что он делает.
read (buffer) возвращает количество прочитанных байтов, другими словами: это не гарантирует заполнение вашего буфера в любом случае.
См. DataInputStream.readFully () для кода, который заполняет весь массив:
или вы можете использовать следующие функции (основанные на DataInputStream.readFully ()):
public final void readFully(InputStream in, byte b[]) throws IOException
{
readFully(in, b, 0, b.length);
}
public final void readFully(InputStream in, byte b[], int off, int len) throws IOException
{
if (len < 0) throw new IndexOutOfBoundsException();
int n = 0;
while (n < len)
{
int count = in.read(b, off + n, len - n);
if (count < 0) throw new EOFException();
n += count;
}
}
Ваш код будет выглядеть так:
InputStream is = socket.getInputStream();
byte[] buffer = new byte[20000];
readFully(is, buffer);
System.out.println("socket read");