I/O
序列化
对象持久化
在 Java 程序中所创建的对象都保存在内存中,一旦 JVM 停止运行,这些对象都将会消失。因此以下两种情况必须通过序列化实现:
- 需要把对象持久化保存在文件中,在 JVM 重启后能够继续使用。
- 通过网络传送对象信息,在多个 JVM 间共享对象。
Serializable 接口
在类中声明实现 Serializable 接口,表示允许 Java 程序对这个类的对象序列化:JVM 会将对象的成员变量保存为一组字节,这些字节可以再被 JVM 组装成对象。对象序列化只保存的对象的成员变量,且不会关注类中的静态变量。
- transient 字段:默认序列化机制就会被忽略。
- private 字段:序列化后不会被保护,任何 JVM 都可读取。
//person类的读入读出 //对于 class Person implements Serializable ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file)); Person person = new Person("John", 101, Gender.MALE); oout.writeObject(person); oout.close(); ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file)); Object newPerson = oin.readObject(); // 没有强制转换到Person类型 oin.close();Copy to clipboardErrorCopied 复制代码
标准输入/输出
标准输入流 System.in
读取标准输入设备数据(键盘),每次输入将以换行符结束。数据类型为 InputStream。
char c = (char)System.in.read(); // 读取单个输入字符,返回其 ASCII 值(int) byte[] b = new byte[20]; System.in.read(b); // 读取输入定长字符组,返回字符个数(int)Copy to clipboardErrorCopied 复制代码
标准输出流 System.out
向标准输出设备输出数据(控制台)。数据类型为 PrintStream。
System.out.print("hello"); // 输出数据 System.out.println("hello"); // 输出数据并换行Copy to clipboardErrorCopied 复制代码
格式化输出
通过 printf 方法可以输出指定格式数据:其中 %d
表示整型数字, %f
表示浮点型数字, %%
表示百分号。
在百分号后加入特殊符号,可以指定数据的显示类型。
符号 | 作用 | 示例 | 效果 |
+ | 为正数或者负数添加符号 | ("%+d",99) | +99 |
2 | 位数(默认右对齐) | ("%4d", 99) | __99 |
− | 左对齐 | ("%-4d", 99) | 99__ |
0 | 数字前补0 | ("%04d", 9999) | 0099 |
, | 以“,”对数字分组 | ("%,d", 9999) | 9,999 |
.2 | 小数点后精确位数 | ("%5.2f", 9.999) | _9.99 |
System.out.printf("The number is %+,9.3f", PI); // 输出指定格式数据