Java 数据输入流';她准备好了

Java 数据输入流';她准备好了,java,sockets,datainputstream,Java,Sockets,Datainputstream,我使用dataInputStream的readFully消息读取固定长度字节数组,如下所示: byte[] record = new byte[4660004]; in.readFully(record); 这里的问题是,有时读取这么多字节需要5秒钟以上,相当于20000条记录。我在插座上收到了这些数据。客户端正在以4660004字节的字节数组发送数据。有没有一种方法可以更快地接收这些数据,因为现在需要大约5分钟才能收到100万条这样的记录 编辑::完整数据流: 首先,我创建流: stati

我使用dataInputStream的readFully消息读取固定长度字节数组,如下所示:

byte[] record = new byte[4660004];

in.readFully(record);
这里的问题是,有时读取这么多字节需要5秒钟以上,相当于20000条记录。我在插座上收到了这些数据。客户端正在以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帮助开始滚动,我应该在哪里包含缓冲区?

注释开始滚动,因此转到答案

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

使用BufferedInputStream在客户端缓冲输入


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

您的DataInputStream是否正在包装BufferedInputStream?@Nathan-否。我如何才能做到这一点?请在编辑中查看我的代码,以了解我的处理情况。请尝试以下操作:
dln=newdatainputstream(new java.io.BufferedInputStream(connection.getInputStream())这样做可能无法解决性能问题。这取决于套接字实现返回的输入流的性质,但这不会有什么坏处。@Nathan-我在客户端可以做些什么来解决这个性能问题?我的意思是,如何缓冲客户端的DataOutputStream?