【发布时间】:2015-04-24 02:05:13
【问题描述】:
我无法理解缓冲区在 Java IO 中是如何工作的。
如果我表达的不够清楚,请原谅,我不是 擅长所有这些概念。
据我所知,在 Java 中,对于字符(意味着 每个字符和编码选项可能超过一个字节)和流 字节。
还有一些使用缓冲区的类。
我相信使用缓冲区主要是为了避免不必要的系统 涉及昂贵操作的调用,例如访问速度较慢的设备,通过 在内存中存储更多,并使系统调用对更多数据有用。
我遇到的问题是,似乎有用于读取器/写入器和流的缓冲类。
我想知道缓冲字符是否足够,或者到时候那些 字节到达流类,它们将被刷新,例如换行符, 正如一些班级所说的那样。
我发现的最好的就是post
这些不同的代码 sn-ps 在缓冲方面如何比较? 自动刷新是否会阻碍缓冲的意图? 是否应该只有一个缓冲区在播放,如果是,在哪里(写入器或流) 为什么?:
// resolveSocket is some socket
PrintWriter out = new PrintWriter(
resolveSocket.getOutputStream(),
true);
// vs
PrintWriter out = new PrintWriter(
new OutputStreamWriter(
new BufferedOutputStream(resolveSocket.getOutputStream()),
StandardCharsets.UTF_8),
true)
我的兴趣首先是更好地理解缓冲,然后才实用。
提前谢谢大家。
编辑:发现 this 其他有趣且相关的堆栈溢出问题。
另外this 另一个人谈到了 BufferedOutputStream。
【问题讨论】:
-
那么,你为什么要标记
C? -
@SouravGhosh 因为几乎所有东西都是用 C 实现的,而 C 人可能更了解缓冲和系统调用,所以我想他们可能会对这个问题感兴趣。
-
我把C标签改成了JVM,这样可能更有意义
标签: java io stream operating-system jvm