我正在通过套接字处理 ASCII 输入/输出流,速度很关键。我听说使用正确的 Java 技术真的很重要。我有一本教科书说使用缓冲区是最好的方法,但也建议使用 DataInputStreamReader 链接。
对于输出,我使用了带有 OutputStreamWriter 的 BufferedOutputStream,这似乎没问题。但我不确定输入流使用什么。我正在研究新线路,那么 Scanner 有什么用吗?速度至关重要,我需要尽快从网络上获取数据。
谢谢。
酸碱度
最佳答案
只是为了笑...
socket = new ServerSocket(2004, 10);
connection = socket.accept();
in = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String line = null;
do {
line = br.readLine();
} while (!"done".equals(line));
使用 LOOPBACK,即仅使用本地进程在我的机器上运行到本地主机,并使用适当的“愚蠢”客户端。
requestSocket = new Socket("localhost", 2004);
out = requestSocket.getOutputStream();
PrintWriter pw = new PrintWriter(out);
String line = "...1000 characters long...";
for (int i = 0; i < 2000000 - 1; i++) {
pw.println(line);
}
line = "done";
pw.println(line);
pw.flush();
您会注意到这发送了 2M“1000 字符”行。这只是一个粗略的吞吐量测试。
在我的机器上,环回,我得到大约 190MB/秒的传输速率。字节,而不是位。 190,000 行/秒。
我的观点是,使用普通 Java 套接字的“简单”方法非常快。这将使任何常见的网络连接饱和(这意味着网络将比您在这里的 I/O 更慢)。
可能“足够快”。
您期望什么样的流量?
关于java - 使用 ASCII 行处理 Java IO 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111749/