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. WINDOWS API 大全(一)

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

  2. OpenStack Nova 高性能虚拟机之 CPU 绑定

    目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...

  3. Eclipse与Tomcat

    新进一个Web项目,有些小坎坷,于是引发了对于Eclipse和Tomcat的配置关系的思考. 首先提及一点当年的观点:Tomcat是一个容器,所有的功能都是以插件的形式放入其中:比如tomcat就是o ...

  4. 应用安全 - CMS - ThinkCMF - 漏洞汇总

    ThinkCMF X1.6.0-X2.2.3任意内容包含漏洞 Date: 2019.10 类型: 任意文件写入导致远程代码执行 影响范围: ThinkCMF X1.6.0 ThinkCMF X2.1. ...

  5. C#方法名前的方括号

    1.序列化:[Serializable]public void 方法名(){...} 2.WebServices方法:[WebMethod]public void 方法名(){...} 3.Ajax( ...

  6. MySQL-快速入门(15)MySQL Replication,主从复制

    1.何为主从复制. 从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务 ...

  7. JS封装插件:实现文件读写功能

    scripting.FileSystemObject是一个可以实现文件读写的COM组件,由于COM组件可以被跨语言调用,因此可以选择像vbs或者JS这种脚本语言调用,下面我就使用该COM组件封装了一个 ...

  8. 如何配置vsftpd服务器

    1,通过yum查看本地是否存在vsftpd rpm -qa|grep vsftpd [root@node2 ~]# rpm -qa |grep vsftpdvsftpd-3.0.2-25.el7.x8 ...

  9. win10上安装redis

    1.下载安装包: 下载地址: 链接:https://pan.baidu.com/s/1oGPrfQJvFz-fX_KNcTTNUw 提取码:eake 2.在适合的位置创建一个文件夹,并将下载到的压缩包 ...

  10. 小白如何入门 Python 爬虫?

    本文针对初学者,我会用最简单的案例告诉你如何入门python爬虫! 想要入门Python 爬虫首先需要解决四个问题 熟悉python编程 了解HTML 了解网络爬虫的基本原理 学习使用python爬虫 ...