我有一個封閉的soruce應用程序,它將一個文件作爲輸入,計算它的散列並執行其他一些我無法控制的東西。修改源代碼或逆向工程是不可行的。Golang虛擬文件
該程序設計用於處理常規文件,但是我需要從HDFS提供非常大的文件。複製文件將花費太多時間和空間在磁盤上。所以我正在考慮使用FUSE,但我沒有找到一個好的解決方案。我嘗試使用命名管道如下:
func readFile(namenode, path string, pipe *os.File) {
client, err := hdfs.New(namenode)
log.Println(err, client)
hdfsFile, err := client.Open(path)
if err != nil {
log.Fatal(err)
}
log.Println(hdfsFile)
// written, err := io.Copy(pipe, hdfsFile)
bytes := make([]byte, 4096)
for {
read, err := hdfsFile.Read(bytes)
log.Println(read, err)
if err != nil {
break
}
written, err := pipe.Write(bytes)
log.Println(written, err)
}
err = pipe.Close()
log.Println(err)
}
我知道上面的代碼是不完整的,測試文件爲10MB,讀取8倍4096字節命名管道緩衝區滿和其他程序需要它畢竟然而並關閉管道。
但過了一段時間,正在讀取管道的其他程序關閉了管道,並且出現了管道故障錯誤。除了保險絲和管道之外,是否還有可能創建虛擬文件?