java - 如何在 Java 中使用缓冲流附加到文件?

标签 java java-io bufferedinputstream bufferedoutputstream

我有以下代码,但我不确定我在效率/刷新/关闭流方面是否正确执行了所有操作。一些建议会很有帮助,谢谢

    OutputStream out = null;
    try {
        out = new BufferedOutputStream(new FileOutputStream(file, true));
        byte[] buf = new byte[32 * 1024]; // should this be 32KB?
        while ((in.read(buf)) > 0) {
            out.write(buf);
        }
        out.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null)
                out.close();
            if (in != null)
                in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

最佳答案

您遇到的最重要的问题是您忽略了读取的字节数。

for(int len; (len = in.read(buf)) > 0;) 
        out.write(buf, 0, len);

如果您不使用您假设的长度,您将始终读取正好 32 KB,那么这是一个很大的假设。

<小时/>

当您有大量小写入时,缓冲区非常有用。

BufferedOutputStream 的默认缓冲大小为 8 KB,如果您的写入比这个小得多,即 < 512 字节,它们确实可以提供帮助。

但是,如果您正在编写 32 KB,它们可能什么也不做,或者没有帮助。我会把它们拿出来。

顺便说一句,没有缓冲区,你不需要调用flush();

顺便说一句

KB = 1024 bytes
kB = 1000 bytes
Kb = 1024 bits
kb = 1000 bits.

关于java - 如何在 Java 中使用缓冲流附加到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208792/

相关文章:

JavaFX - 中心文件选择器弹出窗口

java - 一种通用的写入方法,FilterWriter

java - 将文件内容作为方法参数传递(例如字符串)

buffer - 读取 HttpURLConnection InputStream - 手动缓冲区还是 BufferedInputStream?

java - Java读取大文件时如何避免OutOfMemory异常

javascript - WebView SpeedTest 结果始终低于 CustomTab 或 Chrome

java - 包含从 block 读取的映射器的 Hadoop java 文件

android - ESP8266 wifi 服务器到 Android 客户端

java - Tomcat/Java - 插入 mysql 数据库

java - 如何确保数据库中的文件路径共享相同的文件分隔符?