java - 使用 ASCII 行处理 Java IO 的最快方法

标签 java stream io java.util.scanner java-io

我正在通过套接字处理 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/

相关文章:

java - 用java管理文件读、保存、写

c# - ReadToEndAsync 是阻塞的,如何让它异步运行?

C# - StreamReader/StreamWriter - 另一个进程使用的文件

java - Maven 项目中的非 Maven 依赖项

java - 在运行时将不同的(新的)JPanel 分配给 JTabbedPane

.NET:如何将 Azure RetriableStreamImpl 转换为 ASP.Net Core IFormFile?

iphone - 如何从互联网广播资源录制音频流?

java - 是否有不同的方法来编写此代码,使其不使用循环

java - bukkit 命令已识别 n

java - 是否有任何设计模式可以根据设备类型在数据之间切换?