java 流 stream foreach创建对象 java 新建流对象

您所在的位置:网站首页 java新建流对象 java 流 stream foreach创建对象 java 新建流对象

java 流 stream foreach创建对象 java 新建流对象

2024-07-16 05:04| 来源: 网络整理| 查看: 265

java中序列化流类的使用一、序列化输出流类

功能:一个能将对象存储到文件中的输出流类,类名为ObjectOutputStream。 使用步骤: 1、创建字节输入流对象,例如FileOutputStream对象,构造方法中传递写入的文件或者文件路径和是否续写标志,当续写标志省略时, 默认为false,即将原有文件覆盖。 2、创建序列化输出流类对象,即ObjectOutputStream对象,构造方法中传递字节输入流对象,例如FileOutputStream对象。 3、调用对象写入数据的方法写入数据,例如write()、writeObject()、writeBoolean()等。如果需要写入对象,则需要调用writeObject()方法。 4、调用close方法释放资源。 注意事项: 1、建议写入数据时只调用一种写入数据的方法,否则读取数据时容易报错。 2、写入对象必须使用writeObject方法。

1.1 构造方法

功能:创建序列化输入流类对象,构造方法中传递字节输入流对象,例如FileOutputStream对象。 用法:ObjectOutputStream 对象名 = new ObjectOutputStream(字节输出流类对象); 示例: //创建文件字节输入流对象 FileOutputStream fos = new FileOutputStream(“src\objectstream\a.txt”); //创建序列化输出流类对象 ObjectOutputStream oos = new ObjectOutputStream(fos);

1.2 常用方法

1.2.1 writeObject() 功能:将对象写入文件的方法。 用法:ObjectOutputStream对象名.writeObject(对象) 示例: //创建对象 Person p1 = new Person(“七七”, 500); //调用writeObject方法写入数据 oos.writeObject(p2); 注意事项:当需要写入多个对象时有两种方法,第一种方法也是最常用的方法为将对象存储到集合(例如:ArrayList集合)中,然后调用 writeObject方法将集合存储到文件中;第二种方法是多次调用writeObject方法写入对象。1.2.2 write() 功能:将单个字节的数据或者多个字节的数据写入文件。 用法: 1、write(int val):向文件中写入一个整数。 参数 int val 需要写入的整数。 用法 对象.write(整数) 示例 oos.write(97) 2、write(byte[] buf):向文件中写入byte数组的数据,字符串可以转换为byte数组然后写入文件。 参数 byte[] buf 需要写入的byte数组 用法 对象.write(byte数组) 示例 oos.write(“abc”.getBytes()); 3、write(byte[] buf, int off, int len):向文件中写入byte数组从off开始len长度的数据。 参数 byte[] buf 需要写入的byte数组 int off 写入的开始位置 int len 写入长度 用法 对象.write(byte数组, 开始位置, 长度) 示例:oos.write(“abcdefgh”.getBytes(), 0, 5);1.2.3 close() 功能:关闭序列化输出流释放资源。 用法:对象.close() 示例:oos.close()序列化输出流示例: 对象类

package objectstream; import java.io.Serializable; /** * 定义一个表示人的类,继承Serializable接口 */ public class Person implements Serializable { //常用变量 private String name; //表示姓名的变量 private int age; //表示年龄的变量 //构造方法 public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } //get和set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

序列化输出流使用类

package objectstream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; /** * 序列化输出流的使用 */ public class ObjectOutputStream01 { public static void main(String[] args) throws IOException { // 创建Person对象 Person p1 = new Person("七七", 500); Person p2 = new Person("可莉", 400); System.out.println(p1); //创建文件字节输入流对象 FileOutputStream fos = new FileOutputStream("src\\objectstream\\a.txt"); //创建序列化输出流类对象 ObjectOutputStream oos = new ObjectOutputStream(fos); //调用writeObject()方法写入对象 oos.write(97); oos.writeObject(p1); oos.writeObject(p2); //调用close方法释放资源 oos.close(); } }二、序列化输入流

功能:一个将文件中的对象数据读取到内存中的类,即反序列化过程,类名为ObjectInputStream。 使用步骤: 1、创建字节输入流对象,例如FileInputStream对象,构造方法中传递读取的文件或者文件路径。 2、创建序列化输入流类对象,构造方法中传递字节输入流对象,例如FileInputStream对象。 3、调用对象的读取文件的方法,例如read()、readObject()。 4、调用对象的close方法释放资源。 注意事项: 1、读取文件中数据时要根据使用的写入方法调用对应读取数据,例如写入使用write方法,读取则需要调用read方法。 2、读取文件中的多个对象时需要try catch抛出异常作为结束标志。

2.1 构造方法

功能:创建序列化输入流对象,即ObjectInputStream对象,构造方法中传递字节输入流对象,例如FileInputStream对象。 用法:ObjectInputStream 对象名 = new ObjectInputStream(字节输入流对象) 示例: //创建文件字节输入流对象 FileInputStream fis = new FileInputStream(“src\objectstream\a.txt”); //创建序列化输入流对象 ObjectInputStream ois = new ObjectInputStream(fis);

2.2 常用方法

2.2.1 readObject() 功能:读取文件中的一个对象数据并返回。 用法:Object o = 对象名.readObject() 示例:Object o = ois.readObject() 注意事项: 1、方法返回的数据是Object类型,如果需要转换为数据对应的对象,可以使用强制类型转换,例如数据为Person类数据, 则使用Person p = (Person)o。 2、当文件中存储多个对象数据时需要使用try catch抛出异常作为结束标志。 示例:try { while (true){ //调用readObject()方法读取数据 Object o = ois.readObject(); System.out.println(o); } }catch (EOFException e){ System.out.println(“文件读取完成”); }2.2.2 close() 功能:关闭序列化输出流释放资源。 用法:对象.close() 示例:ois.close()2.2.3 read() 功能:读取单个或者多个字节的数据,文件读取完成标志为-1。 用法: 1、read():读取单个字节的数据并返回。 用法:int value = 对象名.read() 示例:int value = ois.read(); 2、read(byte[]):读取多个字节缓存到byte数组中并返回读取数据长度,结束标志为-1。 用法:int len = 对象名.read(byte数组) 示例:byte[] bytes = new bytes[8] int len = ois.read(bytes)序列化输入流示例:

package objectstream; import java.io.*; /** * 序列化输入流类的使用 */ public class ObjectInputStream01 { public static void main(String[] args) throws IOException, ClassNotFoundException { //创建文件字节输入流对象 FileInputStream fis = new FileInputStream("src\\objectstream\\a.txt"); //创建序列化输入流对象 ObjectInputStream ois = new ObjectInputStream(fis); int len = ois.read(); System.out.println(len); try { while (true){ //调用readObject()方法读取数据 Object o = ois.readObject(); System.out.println(o); } }catch (EOFException e){ System.out.println("文件读取完成"); }finally { //调用close方法释放资源 ois.close(); } } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3