DataInputStream的readFully查询

时间:2011-05-06 20:54:02

标签: java sockets datainputstream

我正在使用dataInputStream的readFully消息来读取固定长度的字节数组:

byte[] record = new byte[4660004];

in.readFully(record);

这里的问题是有时读取这么多字节需要5秒以上,这相当于20000条记录。我在socket上收到这些数据。客户端以4660004字节的字节数组发送数据。有没有办法更快地接收这些数据,因为它现在需要大约5分钟到100万个这样的记录。

编辑::完整的数据流:

首先我创建了一个流:

static DataInputStream dIn = null;

dIn = new DataInputStream(connection.getInputStream());
msgType = dIn.readByte();

int msgIntLen = dIn.readInt();

processBatch(msgIntType, msgIntLen, dIn, connector);

.
.

private static void processBatch(int msgIntType, int msgIntLen, DataInputStream in,
            Connector connector) throws IOException {

   int recordIntLen = in.readInt();
   byte[] record = new byte[msgIntLen - 4];
   in.readFully(record);

}   

如果wudf有帮助,我应该在哪里加入缓冲?

1 个答案:

答案 0 :(得分:0)

评论开始滚动,所以转到答案。

使用BufferedOutputStream缓冲客户端的输出。确保在写入数据后调用dlOut.flush(),以便未发送的字节不会保留在缓冲的输出流中。

使用BufferedInputStream缓冲客户端的输入。

因为您只是发送字节数组,所以您可能不需要DataInputStream / DataOuputStream,除非您将它们用于其他目的。你可以使用BufferedInputStream / BufferedOutputStream。