zsh2517

Untitled

Sep 5th, 2024
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.40 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.         "fmt"
  5.         "io"
  6.         "os"
  7. )
  8.  
  9. func main() {
  10.         // 打开源文件
  11.         sourceFile, err := os.Open("sharedassets0.assets.resS")
  12.         if err != nil {
  13.                 fmt.Println("Error opening source file:", err)
  14.                 return
  15.         }
  16.         defer sourceFile.Close()
  17.  
  18.         // 创建目标文件
  19.         resultFile, err := os.Create("result")
  20.         if err != nil {
  21.                 fmt.Println("Error creating result file:", err)
  22.                 return
  23.         }
  24.         defer resultFile.Close()
  25.  
  26.         // 定义更大的缓冲区(比如 16MB)
  27.         buffer := make([]byte, 16*1024*1024)
  28.  
  29.         // 用于存储非 0 字节的临时缓冲区
  30.         tempBuffer := make([]byte, 0, 1024*1024) // 1MB 缓冲区用于批量写入
  31.  
  32.         for {
  33.                 // 从源文件读取数据到缓冲区
  34.                 n, err := sourceFile.Read(buffer)
  35.                 if err != nil {
  36.                         if err == io.EOF {
  37.                             break // 文件读取完毕
  38.                         }
  39.                         fmt.Println("Error reading source file:", err)
  40.                         return
  41.                 }
  42.  
  43.                 // 过滤掉 0 字节,将非 0 字节添加到临时缓冲区
  44.                 for _, b := range buffer[:n] {
  45.                         if b != 0 {
  46.                             tempBuffer = append(tempBuffer, b)
  47.                         }
  48.  
  49.                         // 当临时缓冲区达到一定大小时,写入文件并清空缓冲区
  50.                         if len(tempBuffer) >= 1024*1024 {
  51.                             _, err := resultFile.Write(tempBuffer)
  52.                             if err != nil {
  53.                                 fmt.Println("Error writing to result file:", err)
  54.                                 return
  55.                             }
  56.                             tempBuffer = tempBuffer[:0] // 清空缓冲区
  57.                         }
  58.                 }
  59.         }
  60.  
  61.         // 写入剩余的非 0 字节
  62.         if len(tempBuffer) > 0 {
  63.                 _, err := resultFile.Write(tempBuffer)
  64.                 if err != nil {
  65.                         fmt.Println("Error writing remaining data to result file:", err)
  66.                         return
  67.                 }
  68.         }
  69.  
  70.         fmt.Println("Processing completed. Filtered data saved to 'result'.")
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment