我有以下代码片段:func main() { // Some text we want to compress. original := "bird and frog" // Open a file for writing. f, _ := os.Create("C:\\programs\\file.gz") // Create gzip writer. w := gzip.NewWriter(f) // Write bytes in compressed form to the file. while ( looping over database cursor) { w.Write([]byte(/* the row from the database as obtained from cursor */)) } // Close the file. w.Close() fmt.Println("DONE")}但是,我想知道一个小的修改。当文件的大小达到某个阈值时,我想关闭它并打开一个新文件。这也是压缩格式。例如:假设一个数据库有 10 行,每行 50 字节。假设压缩因子为2,即1行50字节压缩为25字节。假设文件大小限制为 50 字节。这意味着在每 2 条记录之后我应该关闭文件并打开一个新文件。如何在文件仍然打开并向其写入压缩文件时跟踪文件大小?
1 回答

千巷猫影
TA贡献1829条经验 获得超7个赞
gzip.NewWriter
需要一个io.Writer
。很容易实现io.Writer
你想要的定制。
例如游乐场
type MultiFileWriter struct {
maxLimit int
currentSize int
currentWriter io.Writer
}
func (m *MultiFileWriter) Write(data []byte) (n int, err error) {
if len(data)+m.currentSize > m.maxLimit {
m.currentWriter = createNextFile()
}
m.currentSize += len(data)
return m.currentWriter.Write(data)
}
注意:您将需要处理一些边缘情况,例如 iflen(data)大于maxLimit. 并且您可能不想跨文件拆分记录。
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消