Java教程

Java IO流相关知识

本文主要是介绍Java IO流相关知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.Java中流的分类

  • 按流的流向分,可分为输入流和输出流

输入流: 只能从中读取数据,而不能向其写入数据。

输出流:只能向其写入数据,而不能向其读取数据。

  • 按处理单元划分,可以分为字节流和字符流

字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

  • 按照角色进行划分,可分为节点流和处理流

节点流:可以直接从/向外部设备读取/写入数据的流,称之为节点流,节点流也被称之为低级流。
处理流:对于已经存在的流进行了连接和封装,扩展了原来的读/写的功能。处理流也被称之为高级流。

java的io包当中包括40多个流,他们都有紧密的联系,和使用的规律,这些流都源于4个抽象基类。

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

2.字节流InputStream和OutputStream的子类分别有哪些,以及对应的字符流、

 注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。

3.字节流与字符流的转化,Java对此提供的支持

输入字节流转为字符流需要用到inputstreamReader的构造方法:
InputStreamReader(InputStream in)
如:
InputStreamReader ins = new InputStreamReader(System.in);
InputStreamReader ins = new InputStreamReader(new FileInputStream(“test.txt”));

输出字符流转为字节流用到OutputStreamWriter或PrintWriter的构造方法:
OutputStreamWriter(OutputStream out)
PrintWriter(OutputStream out)
如:
OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(“test.txt”));

4.Java中的过滤流 (流的装配)有什么作用

过滤流(filter stream)也称为包装流,是为某种目的过滤字节或字符的数据流,基本输入流提供地读取方法只能用来读取字节或字符,而过滤器流能够读取整数值、双精度值或字符串,但需要一个过滤器类来包装输入流。FilterInputStream 类和 FilterOutputStream 类分别是 DataInputStream 类和 DataOutputStream 类的父类,它们分别实现了 DataInput 和 DataOutput 接口,该接口定义了独立于具体机器的带格式的读写操作,从而可以实现对 Java 中的不同基本类型数据的读写。

5.对象的序列化和反序列化,Java对此提供的支持

序列化和反序列化的含义:

Java 序列化是指:将对象转化成一个字节序列(二进制数据)的过程。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化。

Java 反序列化是指:将一个对象的字节序列恢复成 Java 对象的过程。

一个平台中序列化的对象,可以在另一个平台中进行反序列化,因为这个过程是在 JVM 中独立完成的,可以依赖于 Java 的可移植性。

Java提供的支持:

ObjectOutputStream:IO 类,包含序列化对象的方法,writeObject()

ObjectInputStream:IO 类,包含反序列化对象的方法,readObject()

上面两个 IO 流类是高层次的数据库,需要借助文件流进行序列化与反序列化操作。

Serializable ,接口,是一个标志性接口,标识可以在 JVM 中进行序列化,JVM 会为该类自动生成一个序列化版本号。参与序列化与反序列化的类必须实现 Serializable 接口。

serialVersionUID,类属性,序列化版本号,用于给 JVM 区别同名类,没有提供版本号,JVM会默认提供序列化版本号。

transient,关键字,当序列化时,不希望某些属性参与,则可以使用这个关键字标注该属性。

6.Java的File类表示什么,以及它的作用

File类:File类代表一个特定的文件或者目录(文件夹),并提供了若干方法对该文件或目录进行操作。

构造方法:

File(String pathname):通过路径名创建一个新 File 实例。

File(File parent, String child):根据父目录路径File实例和子目录或文件路径创建一个新 File 实例。

File(String parent, String child) :根据父目录路径和子目录或文件路径创建一个新 File 实例。

7.Java对文件的读写分别提供了哪些支持

文件类(File)
1.获取文件信息
getName():获取文件名称,返回String
canRead():boolean类型,是否可读
exist()/isFile():boolean类型,是否存在
length():long,文件长度,以字节为单位
getAbsolutePath():文件绝对路径,返回String
getParent():文件父路径,返回String
isDirectory():boolean 是否为目录
isHidden():boolean是否隐藏
lastModified():long,最后修改时间
delete():删除文件
createNewFile():通过实例创建文件

2.文件输入输出流类
1、字节流
InputStream类:是字节输入流的抽象类,所有字节输入流的父类 eg:BufferedInputStream,FileInputStream等。

常用方法:
read():读取数据的下一个字节,返回0~255的int字节值,如果已达到流末尾而没有可用字节,返回-1。
read(byte[] b):输入流读取一定长度的字节,并以整数形式返回字节数。
close():关闭流。

OutputStream类:是字节输出流的抽象类,所有字节输出流的父类 eg:BufferedOutputStream,FileOutputStream等。

常用方法:
write(int b):将指定字节写入输出流。
write(byte[] b):将b个字节从指定byte数组写入此流。
write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始len个字节写入流。
flush():彻底完成输出并清空缓存区。
close():关闭流。
BufferedInputStream、BufferedOutputStream:带缓存的输入输出流。
FileInputStream:以字节流方式读取,FileOutputStream以字节流方式写入。
2、字符流

Java为支持文件的读写引入Reader和Writer两个类。

Reader类:是字符流输入流的抽象类,所有字符输入流的父类 eg:BufferedReader,InputStreamReader,FileReader等。

Writer类:是字符流输出的抽象类,所有字符输出流的父类 eg:BufferedWriter,OutputStreamWriter,FileWriter等。

这篇关于Java IO流相关知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!