Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "io"
- "os"
- )
- func main() {
- // 打开源文件
- sourceFile, err := os.Open("sharedassets0.assets.resS")
- if err != nil {
- fmt.Println("Error opening source file:", err)
- return
- }
- defer sourceFile.Close()
- // 创建目标文件
- resultFile, err := os.Create("result")
- if err != nil {
- fmt.Println("Error creating result file:", err)
- return
- }
- defer resultFile.Close()
- // 定义更大的缓冲区(比如 16MB)
- buffer := make([]byte, 16*1024*1024)
- // 用于存储非 0 字节的临时缓冲区
- tempBuffer := make([]byte, 0, 1024*1024) // 1MB 缓冲区用于批量写入
- for {
- // 从源文件读取数据到缓冲区
- n, err := sourceFile.Read(buffer)
- if err != nil {
- if err == io.EOF {
- break // 文件读取完毕
- }
- fmt.Println("Error reading source file:", err)
- return
- }
- // 过滤掉 0 字节,将非 0 字节添加到临时缓冲区
- for _, b := range buffer[:n] {
- if b != 0 {
- tempBuffer = append(tempBuffer, b)
- }
- // 当临时缓冲区达到一定大小时,写入文件并清空缓冲区
- if len(tempBuffer) >= 1024*1024 {
- _, err := resultFile.Write(tempBuffer)
- if err != nil {
- fmt.Println("Error writing to result file:", err)
- return
- }
- tempBuffer = tempBuffer[:0] // 清空缓冲区
- }
- }
- }
- // 写入剩余的非 0 字节
- if len(tempBuffer) > 0 {
- _, err := resultFile.Write(tempBuffer)
- if err != nil {
- fmt.Println("Error writing remaining data to result file:", err)
- return
- }
- }
- fmt.Println("Processing completed. Filtered data saved to 'result'.")
- }
Advertisement
Add Comment
Please, Sign In to add comment