gpt4 book ai didi

java - 读取 InputStream 字节并写入 ByteArrayOutputStream

转载 作者:行者123 更新时间:2023-12-04 17:31:52 28 4
gpt4 key购买 nike

我有代码块从 InputStream 读取提到的字节数并使用 ByteArrayOutputStream 返回一个 byte[]。当我将该 byte[] 数组写入文件时,文件系统上的结果文件似乎已损坏。谁能帮我找出下面代码块中的问题。

public byte[] readWrite(long bytes, InputStream in) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int maxReadBufferSize = 8 * 1024; //8KB
long numReads = bytes/maxReadBufferSize;
long numRemainingRead = bytes % maxReadBufferSize;
for(int i=0; i<numReads; i++) {
byte bufr[] = new byte[maxReadBufferSize];
int val = in.read(bufr, 0, bufr.length);
if(val != -1) {
bos.write(bufr);
}
}
if(numRemainingRead > 0) {
byte bufr[] = new byte[(int)numRemainingRead];
int val = in.read(bufr, 0, bufr.length);
if(val != -1) {
bos.write(bufr);
}
}
return bos.toByteArray();
}

最佳答案

我对问题陈述的理解

ByteArrayOutputStream< 中的给定 InputStream 中读取 bytes 字节数/strong>
最后,返回一个字节数组

主要观察结果

  • 已完成大量工作以确保以 8KB 的 block 读取字节。
    此外,最后剩余的奇数 block 被单独读取。

  • 我们还做了很多工作来确保我们从正确的偏移量读取数据。

我的看法

  • 除非我们正在读取一个非常大的文件 (>10MB),否则我看不到读取 8KB block 的正当理由。

  • 让 Java 库完成维护偏移量和确保我们不会读取超出限制的所有艰苦工作。例如:我们不必给出偏移量,只需一遍又一遍地执行 inputStream.read(b),将读取下一个大小为 b.length 的字节数组。同样,我们可以简单地写入 outputStream

代码

public byte[] readWrite(long bytes, InputStream in) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[(int)bytes];

is.read(buffer);
bos.write(buffer);

return bos.toByteArray();
}

引用资料

About InputStreams
Byte Array to Human Readable Format

关于java - 读取 InputStream 字节并写入 ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871095/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com