1 数据流(了解)

1.1 概述

  • 为了方便的操作java语言的基本数据类型和String类型的数据,可以使用数据流。
  • 数据流的分类:
    • DataInputStream
    • DataOutputStream  
  • 常用方法:
    • 读取boolean类型的数据:  
public final boolean readBoolean(){}
public final void writeBoolean(boolean v){}
    • 读取byte类型的数据:  
public final byte readByte(){}
public final void writeByte(int v){}
    • 读取char类型的数据:  
public final void writeChar(int v){}
public final char readChar(){}
    • 读取float类型的数据:  
public final float readFloat(){}
public final void writeFloat(float v){}
    • 读取double类型的数据:  
public final double readDouble(){}
public final void writeDouble(double v){}
    • 读取short类型的数据:  
public final short readShort(){}
public final void writeShort(int v){}
    • 读取long类型的数据:  
public final long readLong(){}
public final void writeLong(long v){}
    • 读取int类型的数据:
public final int readInt(){}
public final void writeInt(int v){}
    • 读取String类型的数据:  
public final String readUTF(){}
public final void writeUTF(String str){}
    • 读取byte[]类型的数据:  
public final void readFully(byte b[]){}
public void write(byte b[]){}

1.2 应用示例

  • 示例:
package day20;

import java.io.*;

public class DataStreamTest {
public static void main(String[] args) {
DataOutputStream dataOutputStream = null;
try {
dataOutputStream = new DataOutputStream(new FileOutputStream("hello.txt"));
dataOutputStream.writeBoolean(true);
dataOutputStream.writeChar('a');
dataOutputStream.writeUTF("我是中国人");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dataOutputStream != null) {
try {
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
  • 示例:
package day20;

import java.io.*;

public class DataStreamTest {
public static void main(String[] args) {
DataInputStream dataInputStream = null;
try {
dataInputStream = new DataInputStream(new FileInputStream("hello.txt"));
boolean b = dataInputStream.readBoolean();
System.out.println("读取boolean类型的数据:" + b);
char c = dataInputStream.readChar();
System.out.println("读取char类型的数据:" + c);
String s = dataInputStream.readUTF();
System.out.println("读取String类型的数据:" + s);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dataInputStream != null) {
try {
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

2 对象流

2.1 概述

  • ObjectInputStream和ObjectOutputStream是用于存储和读取基本数据类型数据或对应的处理流。
  • 其强大之处在于可以把java对象写入到数据源中,也能把对象从数据源中还原回来。
  • 序列化:用ObjectOutputStream类保存基本数据类型数据或对象的机制。
  • 反序列化:用ObjectInputStream类读取基本数据类型数据或对象的机制。
  • ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量。

2.2 对象的序列化

  • 对象序列化机制允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久化的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。
  • 序列化的好处在于可将任何实现了Serializable接口的对象转换成字节数据,使其在保存和传输的时候可以被还原。
  • 序列化是RMI过程的参数和返回值都必须实现的机制,而RMI是JavaEE的基础。因此序列化机制是JavaEE平台的基础。
  • 如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现Serializable,否则,会抛出NotSerializableException异常。

2.3 应用示例

  • 示例:
package day20;

import java.io.Serializable;

public class Person implements Serializable {
private String name;
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
package day20;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream; /**
* 对象流
*/
public class ObjectStreamTest {
public static void main(String[] args) {
ObjectOutputStream objectOutputStream = null; try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream("object.txt")); Person person = new Person();
person.setName("张三");
person.setAge(12); objectOutputStream.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
try {
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package day20;

import java.io.*;

/**
* 对象流
*/
public class ObjectStreamTest {
public static void main(String[] args) {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream("object.txt"));
Object o = objectInputStream.readObject();
if (o instanceof Person) {
Person person = (Person) o;
System.out.println("姓名:" + person.getName() + ",年龄:" + person.getAge());
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (objectInputStream != null) {
try {
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

IO流二的更多相关文章

  1. Java学习之路(十二):IO流<二>

    字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...

  2. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  3. Java IO流(二)

    目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...

  4. IO流(二)

    一:字符流 字符输入流 写入文件字符流 import java.io.FileWriter; import java.io.IOException; //fileWriter public class ...

  5. IO流(二)__BufferedReader和BufferedWriter

    BufferedReader和BufferedWriter 字符流的缓冲区:缓冲区的而出现提高了对数据的读写效率对应类:BufferedWriter  BufferedReader缓冲区要结合流才可以 ...

  6. JavaSE(十二)之IO流的字节流(一)

    前面我们学习的了多线程,今天开始要学习IO流了,java中IO流的知识非常重要.但是其实并不难,因为他们都有固定的套路. 一.流的概念     流是个抽象的概念,是对输入输出设备的抽象,Java程序中 ...

  7. IO流(二)

    二.File类 概述 文件和目录路径名的抽象表示形式 构造方法 public File(String pathname) public File(String parent,String child) ...

  8. Java第三阶段学习(二、IO流--------递归,字节流Stream)

    一.递归 定义:指方法在方法内调用自己 适用于方法的运算主体不变,但运行的时候,参与运算的方法参数会变化注意:一定要给递归一个出口,否则内存溢出 练习题1:使用递归打印文件夹中所有的文件,包含子目录中 ...

  9. Java中的IO流(二)

    上一篇<Java中的IO流(一)>把学习IO流的字符流作了一下记录,本篇把字节流记录一下. 一,Java中的字节流 Java中的字节流的操作方式与字符流的操作方式大致相同,连方法名都是类似 ...

随机推荐

  1. JavaScript中this的一些坑

    我们经常在回调函数里面会遇到一些坑: var obj = { name: 'qiutc', foo: function() { console.log(this); }, foo2: function ...

  2. Advanced Message Queuing Protocol ( 1 ) 概述

    The Advanced Message Queuing Protocol (AMQP)是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议.AMQP定义了 ...

  3. WPF WebBrowser 加载 html ,出现安全警告, 运行 脚本和 activeX 控件,

    对于你的问题,只需要在你的HTML首行添加如下代码即可隐藏安全提示条: <!-- saved from url=(0014)about:internet --> 还有一个可选方案是使用Wi ...

  4. 送书福利| Python 完全自学手册

    前言 这里不讨论「能不能学,要不要学,应不应该学 Python」的问题,这里只会告诉你怎么学. 首先需要强调的是,如果 Python 都学不会,那么我建议你考虑别的行业,因为 Python 之简单,令 ...

  5. 未解决:found 1 high severity vulnerability run `npm audit fix` to fix them, or `npm audit` for details

    问题出现: 在通过 `ng new hello-world` 命令新建项目时,项目出现以下警告: found high severity vulnerability run `npm audit fi ...

  6. [ScreenOS] How to manually generate a new system self-signed certificate to replace the expired system self-signed certificate without resetting the firewall

    SUMMARY: This article provides information on how to manually generate a new system self-signed cert ...

  7. ConfigurationManager.ConnectionStrings 属性

    public static ConnectionStringSettingsCollection ConnectionStrings { get; } App.config <?xml vers ...

  8. [Python3] 001 "Hello World" 与注释

    目录 1. 致敬 1.1 致敬 "Hello World" 1.2 致敬 Python 之父 Guido van Rossum 2. 注释 2.1 单行注释 2.2 多行注释 3. ...

  9. 状态压缩dp相关

    状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总 量很少是,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就是: 都存在某一给 ...

  10. Docker 镜像的常用操作

    镜像作为 Docker 三大核心概念中,最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录 一 Docker 下载镜像 1.1 下 ...