kryoserializer java_使用Kryo序列化任意Java对象(获取IllegalAccess...
动机:
为了帮助进行远程调试(Java),能够请求远程服务器将任意对象发送到我的本地计算机进行检查很有用.但是,这意味着远程服务器必须能够序列化运行时预先未知的任意java对象.
所以我问了一下,偶然发现了Kryo serialization library.从Kryo’s documentation开始,一个主要功能是在序列化任意Java对象方面非常强大.对象不必实现Serializable,也不需要no-arg构造函数进行反序列化,并且我什至不需要在序列化之前了解有关对象结构的任何知识.完善!
问题:
因此,为了测试Kryo,我尝试查看是否可以序列化然后反序列化PrintWriter对象(即任意对象):
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.io.*;
public class SerializationTest {
private static final String ioFileName = "someIO.bin";
public static void main(String[] args) {
// Create a PrintWriter object that I will later attempt to serialize
PrintWriter outObj = null;
try {
outObj = new PrintWriter("textfile.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Change the PrintWriter's state as a test for later to see if state is restored after serialization and deserialization
outObj.println("Hello"); // "Hello" held in PrintWriter's buffer
Kryo kryo = new Kryo(); // Initialize Kryo serialization
writeObj(kryo, outObj); // Save PrintWriter object to file with "Hello" still in its buffer
// Read the previously saved Printwriter object (still with "Hello" in its buffer)
PrintWriter inObj = (PrintWriter) readObj(kryo);
inObj.close(); // commit "Hello" to disk (using deserialized object)
outObj.close(); // commit "Hello" to disk (using original object)
System.out.println(inObj);
}
public static Object readObj(Kryo kryo) {
Object obj = null;
try {
Input input = new Input(new FileInputStream(ioFileName));
obj = kryo.readClassAndObject(input); // ERROR HERE!!
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return obj;
}
public static void writeObj(Kryo kryo, Object obj) {
try {
Output output = new Output(new FileOutputStream(ioFileName));
kryo.writeClassAndObject(output, obj);
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
序列化工作正常,但是反序列化后,对第39行的kryo.readClassAndObject(input)的调用给出了以下IllegalAccessError:
Exception in thread "main" java.lang.IllegalAccessError: tried to access class sun.nio.cs.UTF_8 from class sun.nio.cs.UTF_8ConstructorAccess
at sun.nio.cs.UTF_8ConstructorAccess.newInstance(Unknown Source)
at com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy$1.newInstance(Kryo.java:1234)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1086)
at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:547)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:523)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:704)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:704)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:704)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:704)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:786)
at SerializationTest.readObj(SerializationTest.java:39)
at SerializationTest.main(SerializationTest.java:27)
我曾希望可以对PrintWriter对象outObj进行序列化和反序列化,并且该对象的状态将保持不变,因此我仍然可以使用反序列化的对象来写“ Hello”,该对象将被保存在缓冲区中.
有谁知道这是怎么回事以及如何纠正此错误?
kryoserializer java_使用Kryo序列化任意Java对象(获取IllegalAccess...相关推荐
- java序列化深克隆_克隆可序列化和不可序列化的Java对象
java序列化深克隆 开发人员经常依靠3d方库来避免重新发明轮子,尤其是在Java世界中,Apache和Spring这样的项目如此盛行. 在处理这些框架时,我们通常很少或根本无法控制其类的行为. 这有 ...
- 克隆可序列化和不可序列化的Java对象
开发人员经常依靠3d方库来避免重新发明轮子,尤其是在Java世界中,Apache和Spring这样的项目如此盛行. 在处理这些框架时,我们通常很少或根本无法控制其类的行为. 这有时会导致问题. 例如, ...
- 【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象
前面我们已经介绍过[SpringBoot]十七.SpringBoot 中整合 Redis,我们可以看出,在 SpringBoot 对 Redis 做了一系列的自动装配,使用还是非常方便的 一.背景 1 ...
- 罪恶都市洛杉矶java_「洛杉矶时间」Java代码获取美国洛杉矶的时间 - seo实验室...
洛杉矶时间 TimeZone time1 = TimeZone.getTimeZone("America/Los_Angeles"); Date today1 = calendar ...
- java byte序列化,java对象序列化byte[] and byte[]反序列化对象--转
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- 关于 Java 对象序列化您不知道的 5 件事
数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数 ...
- java对象的序列化机制详解
Java对象的序列化机制 Java对象的序列化,是将内存中的java对象转化为二进制的字节流,然后保存到磁盘中或者在网络上.这就是序列化对象,反序列化顾名思义就是将对象的二进制字节流恢复成原来的对象. ...
- 【java基础,IO合集】文件流、高级流(缓冲流、对象流)、 序列化接口java.io.Serrializable
目录 文件流 1 块读写的文件复制操作 2 文件输出流-覆盖模式 3 文件输出流-追加模式 4 文件输出流-读取文本数据 高级流 1 流连接示意图 2 缓冲流 2.1 使用缓冲流完成文件复制操作 2 ...
- java 中文域名转码_转换java对象
数据解析 ●网络解析 Gson (一个Java序列化/反序列化库,可以将JSON和java对象互相转换) Jackson (Jackson可以轻松地将Java对象转换成json对象和xml文档,同样也 ...
最新文章
- SQL2K数据库开发二之查看和修改Sample数据库
- Oracle的外部表
- Feature Support and Procedure Mapping
- 垃圾回收机制的优点和原理
- Vim-安装 YouCompleteMe
- 写出一个缓存系统的伪代码001
- 一些奇葩的元素节点object,video
- LeetCode 2104. 子数组范围和(单调栈)
- Python精通-Python字符串格式化操作
- Java工程师学习指南 中级篇
- 后台管理系统、商品管理、商品发布、商品回收、订单管理、退款管理、运营管理、商城设置、导航分类、营销管理、优惠券套餐、数据统计、活跃用户、数据埋点、财务管理、对账单、财务数据、账户资产、电商后台
- av终结者特征及防治方法
- 用Python在地图上模拟疫情扩散
- 记一次系统蓝屏处理IRQL_NOT_LESS_OR_EQUAL
- java 单击按钮改变背景颜色_java点击按钮换背景颜色?
- 第三方支付机构是什么意思_什么是支付牌照 在哪查看
- Linux系列课程之一Linux的介绍
- 你还在用命令看日志?快用 Kibana 吧,一张图片胜过千万行日志!
- 教资有小学计算机吗,小学有没有信息技术教师资格证考试?
- Hbaseshell scan多种过滤操作
热门文章
- Android 应用基础知识和应用组件
- ubuntu18.04安裝搜狗輸入法
- Python with上下文管理及自定义上下文管理
- ExtJS表单提交与加载全攻略
- Ext.data.SimpleStore的使用方法
- 《scikit-learn》交叉验证
- 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)
- code dairy
- leetcode —— 209. 长度最小的子数组
- 吴恩达深度学习 —— 3.6 激活函数