如何创建与文件大小相同的缓冲区?

dxb*_*zyk 5 zig

我想避免设置设置大小的缓冲区,因为文件太大或太小以致缓冲区中有空白空间。听起来ArenaAllocator很有希望,因为您可以根据需要分配更多空间。是否有“正确”的方法来执行此操作,即加载作为命令行参数传递到缓冲区的 .json 文件?

sig*_*god 3

如何创建与文件大小相同的缓冲区?

您可以请求文件的大小并分配相同数量的内存:

var file = try std.fs.cwd().openFile("file.txt", .{ open = true }));

const file_size = (try file.stat()).size;
var buffer = try allocator.alloc(u8, file_size);
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下命令读取该文件readNoEof

try file.reader().readNoEof(buffer);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 的File函数readToEndAlloc

const size_limit = std.math.maxInt(u32); // or any other suitable limit
var result = try file.readToEndAlloc(allocator, size_limit);
Run Code Online (Sandbox Code Playgroud)

  • 如果文件在编译时可用,您可以使用“@embedFIle”函数:https://ziglang.org/documentation/master/#embedFile (2认同)