Java自学-I/O 对象流
程序员文章站
2023-08-30 13:13:37
Java 对象流 ObjectInputStream,ObjectOutputStream 对象流指的是可以直接 把一个对象以流的形式 传输给其他的介质,比如硬盘 一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口 步骤 1 : 序列化一个对象 创建一 ......
java 对象流 objectinputstream,objectoutputstream
对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘
一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现serializable接口
步骤 1 : 序列化一个对象
创建一个hero对象,设置其名称为garen。
把该对象序列化到一个文件garen.lol。
然后再通过序列化把该文件转换为一个hero对象
注:把一个对象序列化有一个前提是:这个对象的类,必须实现了serializable接口
package stream; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import charactor.hero; public class teststream { public static void main(string[] args) { //创建一个hero garen //要把hero对象直接保存在文件上,务必让hero类实现serializable接口 hero h = new hero(); h.name = "garen"; h.hp = 616; //准备一个文件用于保存该对象 file f =new file("d:/garen.lol"); try( //创建对象输出流 fileoutputstream fos = new fileoutputstream(f); objectoutputstream oos =new objectoutputstream(fos); //创建对象输入流 fileinputstream fis = new fileinputstream(f); objectinputstream ois =new objectinputstream(fis); ) { oos.writeobject(h); hero h2 = (hero) ois.readobject(); system.out.println(h2.name); system.out.println(h2.hp); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (classnotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } } } package charactor; import java.io.serializable; public class hero implements serializable { //表示这个类当前的版本,如果有了变化,比如新设计了属性,就应该修改这个版本号 private static final long serialversionuid = 1l; public string name; public float hp; }
练习:
准备一个长度是10,类型是hero的数组,使用10个hero对象初始化该数组
然后把该数组序列化到一个文件heros.lol
接着使用objectinputstream 读取该文件,并转换为hero数组,验证该数组中的内容,是否和序列化之前一样
答案:
package stream; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import charactor.hero; public class teststream { public static void main(string[] args) { //创建hero数组 hero hs[] =new hero[10]; for (int i = 0; i < hs.length; i++) { hs[i] = new hero("hero:" +i); } file f =new file("d:/heros.lol"); try( fileoutputstream fos = new fileoutputstream(f); objectoutputstream oos =new objectoutputstream(fos); fileinputstream fis = new fileinputstream(f); objectinputstream ois =new objectinputstream(fis); ) { //把数组序列化到文件heros.lol oos.writeobject(hs); hero[] hs2 = (hero[]) ois.readobject(); system.out.println("查看中文件中反序列化出来的数组中的每一个元素:"); for (hero hero : hs2) { system.out.println(hero.name); } } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (classnotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
上一篇: mybatis的插件机制