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