gpt4 book ai didi

java - 如何从Multipart中获取BufferedInputStream?

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:24 24 4
gpt4 key购买 nike

我正在尝试从上传的 cvs 文件中获取 BufferedInputStream。

我正在使用从 cvs 文件派生的 Multipart。

当我第一次得到Multipart时,它是一个BufferedInputStream,但缓冲区都是空的。

Sorry. Potato Quality

但是如果我深入观察,CoyoteInputStream 中还有另一个缓冲区并且包含数据。

Another Potato, but we're saving money by using XP's Paint

我怎样才能到达第二个缓冲区?我的代码如下。

当然,当到达

时,它会抛出空异常

while ((multiPartDataPos = stream.read(buffer)) >= 0)

我做错了什么?我是否误认为CoyoteInputStream是我想要的数据?

public byte[] handleUploadedFile(Multipart multiPart) 抛出 EOFException {

    Multipart multiPartData = null;
BufferedInputStream stream = null;

int basicBufferSize = 0x2000;

byte[] buffer = new byte[basicBufferSize];

int bufferPos = 0;

try {

while (multiPart.hasNext()) {

int multiPartDataPos = bufferPos;

multiPartData = (Multipart) multiPart.next();

stream = new BufferedInputStream(multiPartData.getInputStream());

while ((multiPartDataPos = stream.read(buffer)) >= 0) {

int len = stream.read(buffer, multiPartDataPos, buffer.length - multiPartDataPos);
multiPartDataPos += len;
}

bufferPos = bufferPos + multiPartDataPos;
}

} ...

最佳答案

你的代码没有任何意义。

while ((multiPartDataPos = stream.read(buffer)) >= 0) {

此时,您已将 multiPartDataPos 字节读取到 buffer 中,因此 buffer[0..multiPartDataPos-1] 包含刚刚读取的数据。

    int len = stream.read(buffer, multiPartDataPos, buffer.length - multiPartDataPos);

此时,您正在进行另一次读取,这可能会返回 -1,否则会将 multiPartPos 中的一些数据添加到 multiPartDataPos+len-

    multiPartDataPos += len;

此步骤仅在 len > 0 时有效。

并且您没有对缓冲区执行任何操作;下一次循环时,您将破坏刚刚读到的任何内容。

Java中读取任意流的正确方法如下:

while ((count = in.read(buffer)) > 0)
{
// use buffer[9..count-1], for example out.write(buffer, 0, count);
}

我不明白为什么您认为需要访问底层流,或者它将为您提供您尚未拥有的东西。

关于java - 如何从Multipart中获取BufferedInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261191/

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