···210210211211 // Copy only live entries from original to temp
212212 for entry in self.index.values_mut() {
213213- let mut buf = vec![0u8; entry.compressed_size() as usize];
214213 self.file.seek(SeekFrom::Start(entry.offset()))?;
215215- self.file.read_exact(&mut buf)?;
216216-217214 temp_file.seek(SeekFrom::Start(current_offset))?;
218218- temp_file.write_all(&buf)?;
215215+216216+ // Stream data without allocating full buffer
217217+ let mut limited = (&mut self.file).take(entry.compressed_size());
218218+ io::copy(&mut limited, &mut temp_file)?;
219219220220 entry.set_offset(current_offset);
221221 let pad = pad::<8, u64>(entry.compressed_size());