我的數據存儲在磁盤上的文件太大,無法存儲在主內存中。如何執行流式字符轉換?
我想從磁盤此數據通過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
?
我應該把這個問題放在unix堆棧交換上嗎?無論如何,解決方案是使用'recode'命令(gnu.org/software/recode),它可以在數據流出時進行流式處理。 – Cera