看到StreamCorruptedException抛出“原因”并指出“ 无效流头 ”,然后提供该无效流头的第一部分是相对常见的情况。 通常,确定异常原因的有用线索是了解无效流头是什么,因为这可以解释意外的原因并引起问题。

StreamCorruptedException只有两个构造函数, 一个不接受任何参数 , 一个接受单个描述异常原因的String 。 这告诉我们,“无效流头:XXXXXXXX”消息(其中XXXXXXXX表示各种无效的头详细信息)由实例化(并可能抛出)这些StreamCorruptedException的代码提供,而不是由该异常类本身提供。 这意味着,遇到这些异常之一时,不一定总是遇到相同格式的消息,但是在大多数情况下,格式与“ invalid stream header:”无效,后跟该无效流头的第一部分。

通常由ObjectInputStream抛出此异常。 该类的Javadoc包含一些有用的详细信息,有助于解释为什么遇到“ StreamCorruptedException:invalid stream header ”。 类级别的Javadoc指出:“只能从流中读取支持java.io.Serializable或java.io.Externalizable接口的对象。” ObjectInputStream(InputStream)构造函数的Javadoc声明(我强调说 ) ``创建一个从指定InputStream读取的ObjectInputStream 。 从流中读取并验证序列化流头 。”

正如引用的Javadoc所解释的, ObjectInputStream应该与序列化数据一起使用。 当文本文件(例如HTML,XML,JSON等)传递给此构造函数而不是Java序列化文件时,会发生“ StreamCorruptedException:无效的流头”消息的许多情况。

以下是从与StreamCorruptedException相关联的“无效流头”消息派生并在线报告的“ ASCII”值示例。

无效的流头值(HEX) 对应的整数 相应
“ ASCII”值
在线参考/示例
00000000 000 000 000 000 https://stackoverflow.com/questions/44479323/exception-in-thread-main-java-io-streamcorruptedexception-invalid-stream-head
0A0A0A0A 010010010010 https://issues.jenkins-ci.org/browse/JENKINS-35197
0A0A3C68 010010060104 <h https://developer.ibm.com/answers/questions/201983/what-does-javaiostreamcorruptedexception-invalid-s/
20646520 032100101032 https://stackoverflow.com/questions/2622716/java-invalid-stream-header-problem
30313031 048 049 048 049 0101 https://stackoverflow.com/questions/48946230/java-io-streamcorruptedexception-invalid-stream-header-30313031
32303138 050 048 049 056 2018年 https://stackoverflow.com/questions/49878481/jpa-invalid-stream-header-32303138
3C21444F 060 033 068 079 <!DO https://github.com/metasfresh/metasfresh/issues/1335
3c48544d 060 072 084 077 <HTM http://forum.spring.io/forum/spring-projects/integration/jms/70353-java-io-streamcorruptedexception-invalid-stream-header
3C6F626A 060111098106 <obj
3C787364 060120115100 <xsd https://stackoverflow.com/questions/29769191/java-io-streamcorruptedexception-invalid-stream-header-3c787364
41434544 065 067 069 068 ACED https://stackoverflow.com/questions/36677022/java-io-streamcorruptedexception-invalid-stream-header-41434544
48656C6C 072 101 108 108 地狱 https://stackoverflow.com/questions/28298366/java-io-streamcorruptedexception-invalid-stream-header-48656c6c
4920616D 073 032 097 109 我是 https://stackoverflow.com/questions/34435188/java-io-streamcorruptedexception-invalid-stream-header-4920616d
54656D70 084 101109112 温度 https://stackoverflow.com/a/50669243
54657374 084 101115116 测试 java.io.StreamCorruptedException:无效的流头:54657374
54686973 084 104105115 这个 https://stackoverflow.com/questions/28354180/stanford-corenlp-streamcorruptedexception-invalid-stream-header-54686973
64617364 100097115100 s https://stackoverflow.com/questions/50451100/java-io-streamcorruptedexception-invalid-stream-header-when-writing-to-the-stdo?noredirect=1&lq=1
70707070 112112112112 pppp https://stackoverflow.com/questions/32858472/java-io-streamcorruptedexception-invalid-stream-header-70707070
72657175 114101113117 要求 https://stackoverflow.com/questions/8534124/java-io-streamcorruptedexception-invalid-stream-header-72657175
7371007E 115113 000126 平方〜 https://stackoverflow.com/questions/2939073/java-io-streamcorruptedexception-invalid-stream-header-7371007e
77617161 119097113097 瓦卡 https://coderanch.com/t/278717/java/StreamCorruptedException-invalid-stream-header
7B227061 123034112097 {“ pa https://stackoverflow.com/questions/9986672/streamcorruptedexception-invalid-stream-header

上面的示例显示了“ StreamCorruptedException:无效流头”消息,该消息发生在表示文本的输入流传递给期望Java序列化格式的构造函数的情况下。 突出显示的行特别有趣。 该条目(“ ASCII”字符表示形式的“ ACED ”)看起来像通过Java的默认序列化序列化的所有文件中所期望的一样,但这并不完全正确。

Java Object Serialization Specification的“ Terminal Symbols and Constants ”部分告诉我们, java.io.ObjectStreamConstants定义了一个常量STREAM_MAGIC ,它是“写入流头的幻数”。 该规范进一步解释了ObjectStreamConstants.STREAM_MAGIC被定义为(short)0xaced并且可以根据需要在Java代码中进行验证。 特定条目导致错误的原因是它应该是“ ACED”的十六进制表示,而不是转换后的“ ASCII”字符表示。 换句话说,对于该特定情况,实际上是文字文本“ ACED”在前一个字节中,而不是十六进制“ ACED”表示形式所表示的字节。

有多种方法可以转换“ StreamCorruptedException:无效流头”消息中提供的十六进制表示,以查看其是否转换为表示某些含义的文本。 如果它是文本,则知道他或她已经处于一个糟糕的开端,因为应该使用二进制序列化文件代替文本。 该文本中的字符可以提供有关意外提供哪种类型的文本文件的进一步线索。 这是使用Java( 可在GitHub上 )将提供的十六进制表示形式转换为“ ASCII”文本的一种方法:

private static String toAscii(final String hexInput)
{final int length = hexInput.length();final StringBuilder ascii = new StringBuilder();final StringBuilder integers = new StringBuilder();for (int i = 0; i < length; i+=2){final String twoDigitHex = hexInput.substring(i, i+2);final int integer = Integer.parseInt(twoDigitHex, 16);ascii.append((char)integer);integers.append(String.format("%03d", integer)).append(" ");}return hexInput + " ==> " + integers.deleteCharAt(integers.length()-1).toString() + " ==> " + ascii.toString();
}

文本流不经意传递给ObjectInputStream的构造方法不是“ StreamCorruptedException:无效的流头”的唯一原因。 实际上,任何不以预期的“流魔术”字节( 0xaced )开头的InputStream (文本或二进制)都将导致此异常。

翻译自: https://www.javacodegeeks.com/2019/01/value-streamcorruptedexception-invalid-stream.html

从StreamCorruptedException解析值:无效的流头消息相关推荐

  1. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  2. 【音视频数据数据处理 14】【FLV篇】解析FLV视频码流,并分离FLV中的视频及MP3音频文件

    [音视频数据数据处理 14][FLV篇]解析FLV视频码流,并分离FLV中的视频及MP3音频文件 一.FLV封装原理 1.1 Tag Data 1.1.1 Audio Tag Data结构(音频Tag ...

  3. Kafka设计解析(七)- 流式计算的新贵 Kafka Stream

    http://www.infoq.com/cn/articles/kafka-analysis-part-7 Kafka Stream背景 Kafka Stream是什么 Kafka Stream是A ...

  4. Xamarin.iOS项目提示error MSB3174:”TargetFrameworkVersion”的值无效

    Xamarin.iOS项目提示error MSB3174:"TargetFrameworkVersion"的值无效 错误信息:MSBulid\14.0\bin\Microsoft. ...

  5. RTP协议全解析(H264码流和PS流)(转)

    源: RTP协议全解析(H264码流和PS流) 转载于:https://www.cnblogs.com/LittleTiger/p/10489247.html

  6. mybatis学习(5):安装 SQL Server installsharewowdir命令值无效的问题

    [错误消息] INSTALLSHAREDWOWDIR 命令行值无效.请确保指定的路径有效,并且与 INSTALLSHAREDDIR 路径不同. ============================ ...

  7. springboot项目配置视图解析器无效的问题

    springboot项目配置视图解析器无效的问题 今天springboot尝试配置视图解析器的时候,如图: 一切正常,视图解析器却始终无效.后面发现问题. 在控制器的注解要使用:@Controller ...

  8. a-tabs defaultActiveKey默认值无效

    使用ant design vue的tab切换初始值无效 <template><a-tabs defaultActiveKey="1"><a-tab-p ...

  9. css样式属性值无效问题

    我出现的问题是单位写错导致css样式属性值无效,如图所示,倾斜度单位是deg而不是dep,原因:对此单位不熟悉: 经过看其他人文章发现还有可能出现以下问题: 1.css写属性值,一个标签的中括号后面加 ...

最新文章

  1. canvas.width和canvas.style.width区别以及应用
  2. 3a三次方h c语言表达式,希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题...
  3. linux下使用rpm安装libxml2,gcc,gcc-c++等基本包
  4. 有三AI发布360页11万字深度学习CV算法工程师成长指导手册,可下载收藏打印,未完待续...
  5. Python内置函数filter()和匿名函数lambda解析
  6. 又到中元节 应用宝教你如何打败各种鬼
  7. 手机照片导入电脑步骤_如何将手机中的照片、视频快速的保存到U盘上?3分钟教你详细步骤...
  8. 毕业十年,你的收入是怎样的?
  9. Java文件编码格式转换
  10. 带视频加密功能的视频播放器
  11. 计算机网络安全漏洞排查报告,网络安全漏洞自查报告.docx
  12. dojo 框架实战笔记
  13. 通用验证码识别SDK免费开源
  14. 计算机论文获奖证书,教改论文获奖证书-中国教育学会获奖证书评高级有用吗?...
  15. LINUX 报错:使用scp复制文件No such file or directory 及主机名注意事项
  16. 深度分析:传统企业如何通过开源信息化平台成功实现数字化转型
  17. .Net ( c# ) 与 Fortran 混合编程实例(二):杆系结构有限元法——平面桁架解答(2)...
  18. m基于CNN卷积神经网络和GEI步态能量图的步态识别算法MATLAB仿真
  19. python爬取4399小游戏数据_25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在...
  20. L440的2*2 11b/g/n Wireless LAN M.2 Adapter停止服务的解决方法

热门文章

  1. 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)
  2. 【模板】一维树状数组
  3. 泰勒及洛朗展开学习笔记
  4. Scala与Java差异(二)之条件控制与循环
  5. 最新 Spring 系列教程,都在这了
  6. JavaFX8 modena样式(css)源码
  7. 汇编语言(一)之反转字符串输出
  8. 揭开Java 泛型类型擦除神秘面纱
  9. 成为更优秀的程序员:退后一步看问题
  10. MyBatis 思维导图,让 MyBatis 不再难懂(一)