From 841dc7e79d79eab52cdb34ad08068fd89e61e43d Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 26 Mar 2026 08:32:16 +0800 Subject: [PATCH] Reduce memory usage --- src/ext/psb.rs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/ext/psb.rs b/src/ext/psb.rs index 792b1cb..49b1c89 100644 --- a/src/ext/psb.rs +++ b/src/ext/psb.rs @@ -1598,24 +1598,16 @@ impl PsbReaderExt for PsbReader { if signature != PSB_SIGNATURE { return Err(anyhow::anyhow!("Failed to open PSB: invalid signature")); } - - stream.seek(SeekFrom::Start(0))?; - let mut raw = Vec::new(); - stream.read_to_end(&mut raw)?; - - let normal_file = PsbReader::open_psb(MemReader::new(raw.clone())); + let normal_file = PsbReader::open_psb(&mut stream); match normal_file { Ok(mut file) => file .load() .map_err(|e| anyhow::anyhow!("Failed to load PSB: {:?}", e)), Err(err) => { - let encryption = if raw.len() >= 8 { - u16::from_le_bytes([raw[6], raw[7]]) - } else { - 0 - }; + stream.seek(SeekFrom::Start(0))?; + let encryption = stream.peek_u16_at(6).unwrap_or(0); if encryption != 0 { - load_psb_dullahan(MemReader::new(raw)).map_err(|fallback_err| { + load_psb_dullahan(&mut stream).map_err(|fallback_err| { anyhow::anyhow!( "Failed to open PSB: {:?}; fallback failed: {}", err,