file - Erlang 文件 I/O : Large binary files and gzip streaming

标签 file file-io erlang gzip

我有两个关于 Erlang 文件 i/o 的问题;在 Erlang 中实现的最佳方法是什么:

  • 读取大型二进制文件(许多 GB)而不将整个文件复制到内存中
  • 将 gzip 压缩的二进制文件作为解压缩流读取

  • 谢谢!

    最佳答案

    根据我的经验, file:read/2 单独将是 非常尽管 read_ahead,但如果频繁调用少量数据,速度会很慢和 raw .您必须在此基础上实现一个二进制缓冲区。如果这是面向块的处理,那么我同意。

    我说的是几个小时的运行时间(仅使用 file:read/2)与 2 分钟(在纯 Erlang 中实现缓冲)。

    这是我一次读取几个 10 个字节的测量结果:

    %% Bufsize vs. runtime [ns]
    %% 50       169369703
    %% 100      118288832
    %% 1000      70187233
    %% 10000     64615506
    %% 100000    65087411
    %% 1000000   64747497
    

    在这个例子中,性能并没有真正增加超过 10 KB 的缓冲区大小,因为 file:read 的相对开销变得足够小。

    关于file - Erlang 文件 I/O : Large binary files and gzip streaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807803/

    相关文章:

    javascript - 使用 HTML5 + Javascript 将数据字符串保存为文件,而不使用 URI

    git - 通过build.gradle任务在项目目录中创建version.txt文件

    php - 在 PHP fwrite() 中覆盖内容

    concurrency - Erlang - 餐饮哲学家的错误

    erlang - 如何在Erlang中实现ETS状态的线程安全?

    linux - 使用文件://path in linux to access a file

    file - Phonegap 2.2.0的FileReader的seek方法在哪里?

    .net - 写一个 .txt 文件,没有额外的一行?

    java - 多个线程可以同时将数据写入文件吗?

    Erlang列表匹配