HoneyMoose
  • 首页
  • Java
  • Jersey
  • Jira
  • Confluence
  • U.S.
    • USRealEstate
    • USVisaTrack
    • H1B
  • 项目和网站
    • CWIKI.US
    • OSSEZ 社区
    • WIKI.OSSEZ.COM
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
BLOG.OSSEZ.COM
A responsive blog theme focused om user reading experience
  1. Home
  2. Computer Science
  3. Java
  4. This article

java.io.IOException: mark/reset not supported 异常

2020年10月28日 1174Browse 0Like 0Comments

在 Azure 上传文件的时候遇到了一个下面的异常:

java.io.IOException: mark/reset not supported
at java.base/java.io.InputStream.reset(InputStream.java:655)
at com.azure.storage.common.Utility.lambda$convertStreamToByteBuffer$4(Utility.java:236)
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46)
at reactor.core.publisher.Mono.subscribe(Mono.java:4213)

问题解决

当给定的流不支持 mark 和 reset 就会报这个错误。

我们用的代码是:

blobClient.upload(inputStream , inputStream.available());

InputStream 是不支持 mark 和 reset 的。

BufferedInputStream继承于FilterInputStream,提供缓冲输入流功能。

缓冲输入流相对于普通输入流的优势是,它提供了一个缓冲数组,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(例如你指定的文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户。

由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快。

Azure 使用上面的方法来尽量保障数据能够上传到存储中。

解决方案是用 BufferedInputStream 再把原来的流包装一层。

什么时候会出现这种错误呢,当你获得一个 InputStream 流,这个流是不允许读写头来回移动,也就不允许 mark/reset 机制。

所以上面的代码修改为:

blobClient.upload(new BufferedInputStream(inputStream) , inputStream.available());

 

BufferedInputStream-01

 

然后再重试,你就会看到文件上传上去了。

登录控制台查看上传的文件。

 

BufferedInputStream-02

 

https://www.ossez.com/t/java-io-ioexception-mark-reset-not-supported/617/2

Tags: None
Last updated:2020年10月28日

Kratos

stay absorbed stay excellent

Like
< Previous
Next >

Comments

Cancel reply

Newest Hotspots Random
Newest Hotspots Random
IBM Semeru Windows 下的安装 JDK 17 Okhttp 的 retrofit2 运行警告信息异常 应该升级 JDK 到 17 了吗 OpenAI-J 如何进行测试 微信 API 的发送客服消息返回对象不正确 PHP Windows 下 XAMPP 的 xdebug 配置
ChatGPT 嵌入微信公众号中的访问关于 USRealEstate 公众号的重要更新PHP 的 json_encode 异常Window 的 PHP XAMPP 安装 mongodb 的扩展PHP Windows 下 XAMPP 的 xdebug 配置微信 API 的发送客服消息返回对象不正确
美国考驾照还是中国驾照好考 Confluence 6 Oracle 测试你的数据库连接 配置一个 Confluence 6 环境 新加坡,阿联酋航空这种小国家的航空公司为何能做大 Discourse 如何设置 API 的 key NeoFetch - Linux 使用命令行查看系统信息
Categories
  • Algorithm(算法)
  • AMQP
  • Angular
  • CI
  • Compile And CI
  • Computer Science
  • Confluence
  • DataBase
  • Gradle
  • H1B
  • Hibernate
  • IDE
  • Java
  • Jersey
  • Jira
  • MariaDB
  • PrestaShop
  • Spring
  • Spring Batch
  • U.S.
  • USRealEstate
  • USVisaTrack
  • 我的小厨

COPYRIGHT © 2020 HoneyMoose. ALL RIGHTS RESERVED.

THEME CWIKIUS.CN MADE BY VTROIS