Java——I/O I

简介: Java——I/O I

I/O


序列化

对象持久化

在 Java 程序中所创建的对象都保存在内存中,一旦 JVM 停止运行,这些对象都将会消失。因此以下两种情况必须通过序列化实现:

  1. 需要把对象持久化保存在文件中,在 JVM 重启后能够继续使用。
  2. 通过网络传送对象信息,在多个 JVM 间共享对象。

Serializable 接口

在类中声明实现 Serializable 接口,表示允许 Java 程序对这个类的对象序列化:JVM 会将对象的成员变量保存为一组字节,这些字节可以再被 JVM 组装成对象。对象序列化只保存的对象的成员变量,且不会关注类中的静态变量。

  1. transient 字段:默认序列化机制就会被忽略。
  2. 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);  // 输出指定格式数据


目录
相关文章
|
6月前
|
存储 监控 Java
Java输入输出:什么是NIO(New I/O)?
Java输入输出:什么是NIO(New I/O)?
61 1
|
5月前
|
存储 缓存 Java
Java中的缓冲流提升I/O性能,通过内存缓冲区减少对硬件访问
【6月更文挑战第22天】Java中的缓冲流提升I/O性能,通过内存缓冲区减少对硬件访问。`BufferedInputStream`和`BufferedOutputStream`用于字节流,缓存数据批量读写。`BufferedReader`和`BufferedWriter`处理字符流,支持按行操作。使用后务必关闭流。
59 3
|
6月前
|
存储 监控 Java
深入探索Java语言的NIO(New I/O)技术
深入探索Java语言的NIO(New I/O)技术
|
4月前
|
存储 缓存 Oracle
可能是最漂亮的Java I/O流详解
大家有什么思路吗?评论区一起讨论讨论。我需要使用 Java 逐行读取大约 5-6 GB 的大型文本文件。我怎样才能快速完成此操作?最高赞的回答是叫Peter Lawrey的老哥回答的。大家好,我是南哥。一个Java学习与进阶的领路人,今天指南的是Java I/O流,跟着南哥我们一起在Java之路上成长。本文收录在我开源的《Java学习进阶指南》中,涵盖了想要学习Java、成为更好的Java选手都在偷偷看的核心知识、面试重点。
120 1
可能是最漂亮的Java I/O流详解
|
4月前
|
Java Linux
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
|
4月前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
5月前
|
Java 视频直播 数据库连接
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
64 2
|
5月前
|
存储 网络协议 Java
Java I/O 详解:基础、文件操作与 NIO 实践
Java I/O 详解:基础、文件操作与 NIO 实践
50 1
|
4月前
|
Java 数据库
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
31 0
|
4月前
|
Java API 开发者
Java中不同I/O操作的性能比较
Java中不同I/O操作的性能比较