diff --git a/src/io/avro/read/block.rs b/src/io/avro/read/block.rs index c2e74ec883e..62cc5a88efc 100644 --- a/src/io/avro/read/block.rs +++ b/src/io/avro/read/block.rs @@ -40,8 +40,8 @@ fn read_block( }; block.data.clear(); - block.data.resize(bytes, 0); - reader.read_exact(&mut block.data)?; + block.data.try_reserve(bytes)?; + reader.take(bytes as u64).read_to_end(&mut block.data)?; let mut marker = [0u8; 16]; reader.read_exact(&mut marker)?; diff --git a/src/io/avro/read/util.rs b/src/io/avro/read/util.rs index 7bda9d84fac..92cbe3db2b6 100644 --- a/src/io/avro/read/util.rs +++ b/src/io/avro/read/util.rs @@ -23,8 +23,9 @@ fn decode_variable(reader: &mut R) -> Result { fn _read_binary(reader: &mut R) -> Result> { let len: usize = zigzag_i64(reader)? as usize; - let mut buf = vec![0u8; len]; - reader.read_exact(&mut buf)?; + let mut buf = vec![]; + buf.try_reserve(len)?; + reader.take(len as u64).read_to_end(&mut buf)?; Ok(buf) } diff --git a/src/io/avro/read_async/block.rs b/src/io/avro/read_async/block.rs index 89069cad83c..ff92d6a97e7 100644 --- a/src/io/avro/read_async/block.rs +++ b/src/io/avro/read_async/block.rs @@ -42,8 +42,11 @@ async fn read_block( }; block.data.clear(); - block.data.resize(bytes, 0); - reader.read_exact(&mut block.data).await?; + block.data.try_reserve(bytes)?; + reader + .take(bytes as u64) + .read_to_end(&mut block.data) + .await?; let mut marker = [0u8; 16]; reader.read_exact(&mut marker).await?; diff --git a/src/io/avro/read_async/metadata.rs b/src/io/avro/read_async/metadata.rs index 7d8df6888f4..4609509376f 100644 --- a/src/io/avro/read_async/metadata.rs +++ b/src/io/avro/read_async/metadata.rs @@ -48,8 +48,9 @@ async fn read_file_marker(reader: &mut R) -> Result async fn _read_binary(reader: &mut R) -> Result> { let len: usize = zigzag_i64(reader).await? as usize; - let mut buf = vec![0u8; len]; - reader.read_exact(&mut buf).await?; + let mut buf = vec![]; + buf.try_reserve(len)?; + reader.take(len as u64).read_to_end(&mut buf).await?; Ok(buf) }