我将数据存储在磁盘中的文件太大而无法存储在主内存中。
我想通过 将这些数据从磁盘流式传输到数据处理管道中iconv
,如下所示:
zcat myfile | iconv -f L1 -t UTF-8 | # rest of the pipeline goes here
不幸的是,我看到 iconv 在内存中缓冲整个文件,直到它在输出任何数据之前用完。这意味着我在一个内存占用最小的管道中的阻塞操作上用尽了我的所有主内存。
我试过这样调用 iconv :
stdbuf -o 0 iconv -f L1 -t UTF-8
但看起来 iconv 自己在内部管理缓冲——这与 Linux 管道缓冲区无关。
我在 Arch Linux 中使用 gblic 2.6 和 2.7 打包的二进制文件看到了这一点,并且我在 Debian 中使用 glibc 2.5 对其进行了复制。
有没有办法解决这个问题?我知道流字符转换并不简单,但我认为这样一个常用的 unix 工具可以在流中工作;处理不适合主内存的文件并不罕见。我是否必须滚动我自己的二进制链接到libiconv
?