从StreamCorruptedException解析值:无效的流头消息

看到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 所有子类_java 查找类的所有子类

package _02;import java.io.File;import java.net.URL;public class MainTest_FindAllSubClass {public static void main(String[] args) {Class> clazz MainTest_FindAllSubClass.class;// 定位到当前的包路径// URL url Toy.class.getResource("");// 定位到…

[渝粤教育] 中国地质大学 计算机图形学(新) 复习题

《计算机图形学》模拟题 一单选题 1.枚举出图形中所有点的表示方法是() A.图形 B.图像 C.参数法 D.点阵法 2.下面哪个设备不是计算机图形学的输入设备 A.光笔 B.键盘 C.扫描仪 D.显示器 3.下面哪个设备不是计算机图形学的输出设备 A.激光打印机 B.显示器 C.数据手套 D.喷墨打…

光纤收发器有什么用?光纤收发器的作用是什么?

光纤收发器是光通信系统所必须的一款产品设备&#xff0c;它的主要作用是将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。那么&#xff0c;光纤收发器有什么用&#xff1f;光纤收发器的作用是什么呢&#xff1f;接下来我们就跟随飞畅科技的小编来一…

[渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)

《面向对象程序设计》模拟题 一.单选题 1.如果一个类中包含纯虚函数则该类称为(). A.抽象类 B.虚基类 C.派生类 D.子类 2.在类中将show声明为不带返回值的纯虚函数则正确的写法是(). A.virtual void show()0; B.virtual show()0; C.virtual void show(); D.void show()0 virtu…

java如何调用static类_Java中的static的使用指南

一、Java中的static使用之静态变量1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有&#xff0c;而不是某个对象所有&#xff0c;即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问&#xff0c;也可以使用对象名进行访问。使用 stat…

如何利用光衰减器测试光纤收发器的灵敏度?

光纤收发器的灵敏度可以说是光纤收发器的一个重要指标&#xff0c;了解如何测试光纤接收器的灵敏度是一项很重要的技能。当光输入功率在一定范围内时&#xff0c;光纤接收器的性能最佳。但是如何来判断光纤收发器是否会在最低光输入功率时&#xff0c;提供最佳性能呢&#xff1…

[渝粤教育] 西南科技大学 数控机床与编程 在线考试复习资料

数控机床与编程——在线考试复习资料 一、单选题 1.非模态代码指令是指( )。 A.一经在一个程序段中指定,直到出现同组的另一个代码时才失效 B.只在写有该代码的程序段中有效 C.不能独立使用的代码 D.有续效作用的代码 2.S1000表示( )。 A.主轴转速 1000mm/min B.主轴转速1000r…

java与lisp_javalisp

当下&#xff0c;包管理工具十分流行&#xff0c;如今不光是开发用的包&#xff0c;就连软件包都有管理器了。下面隆重推荐 Chocolatey &#xff0c;官网跟其他包管理器一样&#xff0c;都推崇使用命令行下面说一下安装方法管理员身份运行 cmdpowershell -NoProfile -Execution…

mapreduce 算法_MapReduce算法–了解数据联接第二部分

mapreduce 算法自从我上一次发布以来已经有一段时间了&#xff0c;就像我上一次大休息一样&#xff0c;我正在Coursera上一些课程。 这次是Scala中的函数式编程 原理和React式编程原理 。 我发现它们都是不错的课程&#xff0c;如果有时间的话&#xff0c;建议您选一门。 在这篇…

[渝粤教育] 西南科技大学 电子信息工程专业导论 在线考试复习资料

电子信息工程专业导论——在线考试复习资料 一、单选题 1.下面是关于计算机中定点数和浮点数的一些叙述,正确的是( ) A.浮点数是既有整数部分又有小数部分的数,定点数只能表示纯小数 B.浮点数的尾数越长,所表示的数的精度就越高 C.定点数可表示的数值范围总是大于浮点数所表示的…

交换机的硬件故障问题总结

交换机故障一般可以分为硬件故障和软件故障两大类。硬件故障主要指交换机电源、背板、模块和端口等部件的故障&#xff0c;具体可以分为以下几类。接下来就由飞畅科技来为大家详细介绍下交换机的硬件故障问题&#xff0c;感兴趣的朋友就一起来看看吧&#xff01; 一、电源故障…

[渝粤教育] 西南科技大学 线性代数 在线考试复习资料

线性代数——在线考试复习资料 一、单选题 1. A. B. C. D. 2.矩阵的特征值为( )。 A. B. C. D. A. B. C. D. A. B. C. D. A.3 B.4 C.1 D.2 A. B. C. D. A.3个方程,5个未知数 B.5个方程,3个未知数 C.5个方程,5个未知数 D.3个方程,3个未知数 A. B. C. D. A. B. C. D. A. B. C. D…

[渝粤教育] 西南科技大学 英语口语 在线考试复习资料

英语口语——在线考试复习资料 一、简答题 1.口语作文(至少200词) Popular Music. 2.口语复杂问答(每题至少50词) What do you do in your spare time? 3.口语复杂问答(每题至少50词) What characteristics do you think a good teacher should have? 4.口语复杂问答(每…

Spring Data Redis:Sentinel的高可用性

1.概述 为了使Redis具有高可用性&#xff0c;我们可以使用Spring Data Redis对Redis Sentinel的支持。 借助Sentinel&#xff0c;我们可以创建自动抵御某些故障的Redis部署。 Redis Sentinel还提供其他附带任务&#xff0c;例如监视&#xff0c;通知&#xff0c;并充当客户端的…

关于交换机和路由器的区别介绍

交换机&#xff08;又名交换式集线器&#xff09;&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备&#xff0c;它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机的作用可以理解为将一些机器连接起来组成一个局域网。而路由器与交换机…

[渝粤教育] 西南科技大学 财务会计 在线考试复习资料(2)

财务会计——在线考试复习资料 一、单选题 1.下列各项中,不属于筹资活动产生的现金流量的是( )。 A.吸收权益性投资所收到的现金 B.收回债券投资所收到的现金 C.分配现金股利 D.借入资金所收到的现金 2.下列关于财务报表的说法,错误的是( )…

java中原生方法_Java中原生(native)函数的用法

1、原生(Native)函数的概念在Java程序中&#xff0c;可以使用由其他编程语言实现的函数&#xff0c;这种函数&#xff0c;在Java中被称之为原生(Native)函数。2、在Java程序中使用原生函数的优缺点1)优点A、在Java程序中&#xff0c;可以复用已由其他语言实现的各种库。可能已存…

什么是节点光端机?总线型光端机有哪些优势?

节点式光端机又称总线型光端机&#xff0c;其准确的定义是采用单/双纤链路式组网形式的图像传输系统&#xff0c;也被称为链路式光端机。那么&#xff0c;节点式光端机具体是什么呢&#xff1f;总线型光端机又有哪些优势呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细…

[渝粤教育] 西南科技大学 高频电子线路 在线考试复习资料2021版

高频电子线路——在线考试复习资料2021版 一、单选题 1.直接调频电路的优点是( )。 A.载频稳定度高 B.能够获得较大的线性频偏 答案:看左边查询 2.调频信号,则调频指数(最大相偏)是( )。 A.3 B.10 C.1000 D.1 答案:看左边查询 3.在混频过程中,频率等于或接近于中频的干…

【渝粤教育】电大中专学前儿童语言教育 (11)作业 题库

作业视频教务托管&#xff0c;壹叁路路贰陆陆壹〇肆〇 下面哪个选项不是学前儿童语言获得理论( )。 A.先天与后天相互作用论 B.遗传决定论 C.先天决定论 D.后天环境论 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.语言是( )和思维的工具。 A.动作 B.声音 C. 交…