java 序列化流_java的序列化流和打印流

对象操作流(序列化流)

每次读取和写出的都是JavaBean对象.

序列化:将对象写入到文件中的过程

反序列化:从文件中读取对象到程序的过程

transient: 标识瞬态,序列化的时候,该修饰符修饰的成员不能序列化

ObjectOutputStream

构造方法:

public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。

特有方法:

public final void writeObject (Object obj) : 将指定的对象写出。

ObjectInputStream

构造方法:

public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。

特有方法:

public final Object readObject () : 读取一个对象。

java.io.EOFException : 数据输出流到了末尾,继续读取会抛出此异常(读到文件的末尾)

解决方案:使用集合存储要写出的对象,写数据的时候只需要写一个集合对象,下次使用的时候只需要读取了一次就可以.

举个例子:

package review.serializable;

import lombok.*;

import java.io.Serializable;

import java.net.ServerSocket;

/**

* 创建学生类

* 利用lombok可以使用注解来写get,set等方法,使实体类看起来很简单

* @author WZLOVE

* @create 2018-07-25 19:17

*/

@Getter

@Setter

@AllArgsConstructor

@NoArgsConstructor

@ToString

public class Student implements Serializable {

private static final long serialVersionUID = -1495868075552053159L;

private String name;

private int age;

private double score;

}

package review.serializable;

import java.io.*;

import java.util.ArrayList;

/**

* 测试序列化流

*

* @author WZLOVE

* @create 2018-07-25 19:19

*/

public class SerializableDemo {

public static void main(String[] args) throws IOException, ClassNotFoundException {

// 创建对象输出流

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu1.txt"));

// 向文件中输出数据(为了方便读取,所以存入集合,这样的话,读取的时候只用读取一次,查看源码也可以看出,集合也实现了Serializable接口)

ArrayList list = new ArrayList<>();

// 向集合中添加数据

list.add(new Student("stu1",23,100.0));

list.add(new Student("stu2",23,98.0));

list.add(new Student("stu3",24,96.0));

// 利用对象输入流向文件中写入内容

oos.writeObject(list);

oos.close();

// 创建对象输入流

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu1.txt"));

// 利用对象输入流获取文件内容

Object object = ois.readObject();

// 强制类型转换,将Object转换为集合

ArrayList arrayList = (ArrayList)object;

// 进行遍历

for (int i = 0; i < arrayList.size(); i++) {

System.out.println(arrayList.get(i));

}

// 关闭流

ois.close();

}

}

打印流(只有输出流)

字节打印流(了解)

PrintStream:

字符打印流(掌握)

PrintWriter

构造方法:

public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。

PrintWriter(File file) 使用指定的文件创建一个新的PrintWriter,而不需要自动的线路刷新。

PrintWriter(OutputStream out) 从现有的OutputStream创建一个新的PrintWriter,而不需要自动线路刷新。

PrintWriter(Writer out) 创建一个新的PrintWriter,没有自动线冲洗(追加内容考虑参数的变化)。

PrintWriter(Writer out, boolean autoFlush)创建一个新的PrintWriter。

PrintWriter(OutputStream out, boolean autoFlush) 从现有的OutputStream创建一个新的PrintWriter。

特有方法(自动换行(实现自动换行,必须使用println方法)和自动刷新(在构造方法中启用并且要使用println()方法)功能):

void println(Object x) 打印一个对象,然后终止该行。

注意:

实现自动换行必须使用PrintWriter中特有的方法println

实现自动刷新必须满足两个要求,第一个是在构造方法中启用自动刷新,第二个是使用PrintWriter中特有的方法println

举个例子:

package review.print;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

/**

* 测试打印流的书写

* 打印流也是用写文件的,简单的是他能实现自动刷新和自动换行,其他的都简单,就不演示了

* 打印流分为打印字节流和打印字符流

* @author WZLOVE

* @create 2018-07-25 19:55

*/

public class PrintWriteDemo {

public static void main(String[] args) throws IOException {

// 打印流只有输出流

// 创建打印字符流对象(一个true表示追加,第二个true代表开启自动刷新)

PrintWriter pw = new PrintWriter(new FileWriter("pw.txt",true),true);

// 利用特有的方法进行输出(无论是自动刷新还是自动换行,都要利用这个特有的方法)

pw.println("qazxswedc,我爱你");

pw.println("qazxswedc,我爱你");

pw.println("qazxswedc,我爱你");

// 关闭流

pw.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值