将文件读入字符串列表的最有效方法

Kon*_*tin 9 erlang

从erlang中读取文本文件到二进制字符串列表所花费的时间最有效的方法是什么?明显的解决方案

-module(test).
-export([run/1]).

open_file(FileName, Mode) ->
    {ok, Device} = file:open(FileName, [Mode, binary]),
    Device.

close_file(Device) ->
    ok = file:close(Device).

read_lines(Device, L) ->
    case io:get_line(Device, L) of
        eof ->
            lists:reverse(L);
        String ->
            read_lines(Device, [String | L])
    end.

run(InputFileName) ->
    Device = open_file(InputFileName, read),
    Data = read_lines(Device, []),
    close_file(Device),
    io:format("Read ~p lines~n", [length(Data)]).
Run Code Online (Sandbox Code Playgroud)

当文件包含超过100000行时变得太慢.

Zed*_*Zed 16

{ok, Bin} = file:read_file(Filename).
Run Code Online (Sandbox Code Playgroud)

或者如果你需要逐行的内容

read(File) ->
    case file:read_line(File) of
        {ok, Data} -> [Data | read(File)];
        eof        -> []
    end.
Run Code Online (Sandbox Code Playgroud)