java io流屏幕输出_JavaIO流(二)标准输入输出流,字符打印流,序列化,dataInputStream,dataOutputStream...

标准输入流

源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in得到一个InputStream字节输入流。

InputStream in = System.in;

注意:

[1] 标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。

标准输出流(PrintStream)

数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的

print

println

打印方法用于打印各种数据类型。

字符打印流(PrintWriter)

继承于Writer,实现了PrintStream中的所有print方法。此类中的方法不会抛出异常。

比PrintStream多了

write(char[] buf) (写入字符数组。)

write(String s) (写入字符串)

等方法。

序列化:

将内存中的对象永久存储在硬盘中,称为对象序列化,也称永久化

把硬盘持久化的内存恢复到内存的过程称为对象反序列化。

Serializable

类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化,并抛出异常

Serializable接口没有方法或字段,仅用于标识可序列化的语义

1 public class Student implementsSerializable{2 //。。。

序列化对象

ObjectOutputStream 继承于OutputStream,专门用于把对象序列化到本地。提供了

writeXXX

writeObject() 用于写入一个对象

1 public static void main(String[] args) throwsIOException {2

3 Student stu = new Student("001", "大狗", 20, Gender.男);4

5 /**

6 * 方案1:取stu所有的属性,通过特定的字符串(-),把各个属性值连接起来7 * 001-大狗-20-男8 */

9

10 File file = new File("d:\\javatest\\l.txt");11 FileOutputStream out = newFileOutputStream(file);12 ObjectOutputStream oos = newObjectOutputStream(out);13

14 oos.writeObject(stu);15

16 oos.close();17 out.close();18 }

反序列化对象

ObjectInputStream 继承于InputStream ,专门用于把本地持久化内容反序列化到内存,提供了

readXXX

readObject() 用于读取一个序列化内容并返回一个对象。

1 public static void main(String[] args) throwsIOException, ClassNotFoundException {2

3 File file = new File("d:\\javatest\\l.txt");4

5

6 FileInputStream in = newFileInputStream(file);7 ObjectInputStream ois = newObjectInputStream(in);8

9 Student student =(Student) ois.readObject();10 System.out.println(student.getId());11 System.out.println(student.getName());12 System.out.println(student.getAge());13 System.out.println(student.getGender());14

15 ois.close();16 in.close();17 }

序列化版本

当序列化完成后,后期升级程序中的类(Student),此时再反序列化时会出现异常。

异常原因:序列化流的serialVersionUID和升级后类的版本不匹配。

解决方案:给Student类加序列化版本号,有两种方式

f479933f6757329e3553bc2c402f3bde.png

default serial version ID 生成默认的serial version ID 一般值都是1L。

generated serial version ID 根据当前类的属性、方法生成一个唯一ID。

public class Student implementsSerializable {private static final long serialVersionUID = -1003763572517930507L;

transient

开发过程中,如果想忽略某些字段不让其序列化时,可以使用transient修饰。

public class Student implementsSerializable {private static final long serialVersionUID = 7222966748321328300L;privateString id;private transientString name;private transient intage;privateGender gender;private String phone;

DataInputStream/DataOutputStream

DataOutputStream 继承OutputStream,专门用于把基本java数据类型写入输出流。提供了writeXXX 写入基本java数据类型。

DataInputStream 继承于InputStream,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。

DataInputStream/DataOutputStream 特别适合读取/写入在网络传输过程中的数据流。

写入基本java数据类型

1 public static void main(String[] args) throwsIOException {2

3 File file = new File("d:\\javatest\\n.txt");4 FileOutputStream out= newFileOutputStream(file);5 DataOutputStream dos = newDataOutputStream(out);6

7 dos.writeInt(10);8 dos.writeUTF("hello中国");9

10 dos.close();11 out.close();12

13 System.out.println("写入完成");14

15 }

读取基本java数据类型

1 public static void main(String[] args) throwsIOException {2

3 File file = new File("d:\\javatest\\n.txt");4 FileInputStream in = newFileInputStream(file);5 DataInputStream dis = newDataInputStream(in);6

7 int a =dis.readInt();8 String str =dis.readUTF();9

10 System.out.println(a);11 System.out.println(str);12

13 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值