我有一个封闭的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字节命名管道缓冲区满和其他程序需要它毕竟然而并关闭管道。
但过了一段时间,正在读取管道的其他程序关闭了管道,并且出现了管道故障错误。除了保险丝和管道之外,是否还有可能创建虚拟文件?