ストリームから、
意地でも byte[] buffer の長さまで読み込むプログラムを書いたのですが、
美しくないです。
どうにか美しくできないでしょうか?

InputStream in = socket.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();

byte[] buffer = new byte[1024 * 1024];

int read = 0;
int readInBuffer = 0;
while (true) {
read = in.read(buffer, readInBuffer, buffer.length - readInBuffer);
if (read == -1) {
if (readInBuffer == 0) {
break;
} else {
read = buffer.length - readInBuffer;
}
} else if ((readInBuffer + read) != buffer.length) {
readInBuffer += read;
continue;
} else {
readInBuffer += read;
}

bout.write(buff, 0, readInBuffer);

read = 0;
readInBuffer = 0;
}