首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习笔记(基础篇)—IO流

java学习笔记(基础篇)—IO流

作者头像
chlinlearn
发布2019-07-29 19:16:47
8050
发布2019-07-29 19:16:47
举报
文章被收录于专栏:java老实人java老实人

一:流的概念

在Java中,把一组有序的数据序列称为流。

  • ​ 如a.txt的文件拷贝到b.txt中。

在Java中流是使用统一的方式操作输入和输出的数据。

  • 从文件中读取,从键盘读取,从网络中读取... 输出到文件,发送到网络....

流就是一个对象。所在的包java.io.*,Java I/O系统负责处理程序的输入和输出,java.io包它对各种常见的输入流和输出流进行了抽象。

二:流的分类

1)根据流操作的方向,参照物:当前程序

​ a)输入流:将数据读取到程序中就是输入流,reader ​ b)输出流:将程序中的数据写出到文件中就是输出流。writer

2)根据类操作的最小数据单元。

​ a)字节类:如果数据流中最小的数据单元是字节,那么称这种流为字节流;字节流处理单元为 1 个字节,可以操作字节和字节数组

​ b)字符类:如果数据流中最小的数据单元是字符,那么称这种流为字符流。字符流处理的单元为 2 个字节的 Unicode 字符,可以操作字符、字符数组或字符串Java内用Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和java内Unicode 字符流之间的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

3)根据流的角色

​ a)节点流,如FileInputStream ​ b)包装流/处理流,如BufferedInputStream。带有缓冲区

三:常用流

a)java.io.InputStream和java.io.OutputStream

分别表示字节输入流和字节输出流, 是所有字节输入和输出流的父类.其中的方法参照下面的四

b)FileInputStream,FileOutputStream

针对文件进行字节操作。

c)BufferedOutputStream和BufferInputStream流

带有缓冲区的流。---调用flush()刷新缓冲流。 增强输入和输出流的性能。 提高读写的效率。 包装流是可以对其他流进行重新包装。

d)DataInputStream和DataOutputStream.

针对于基本数据类型进行操作

e)ObjectInputStream和ObjectOutputStream

针对于类类型的数据(对象)进行操作。

序列化:将对象保存到文件中或者传输到网络的过程。 反序列化:将文件中或者网络中将对象读取到程序的过程。

进行序列化或者反序列化的类必须实现Serializable接口。该接口是一个空接口, 只是起到了标识的作用,标识该对象可以进行序列化和反序列化serialVersionUID用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

transient:该修饰的属性不会被序列化。是透明的属性。

f)PipedInputStream,PipedOutputStream

管道输入,输出流, 针对线程读取和写入数据 connect():管道输入流连接到管道输出流

g)Reader,Writer抽象类

是所有字符流输出和输入的父类。 字符流是在字节流的基础上进行字符编码(UTF-8,GBK,GB2312...)

h)InputStreamReader,OutputStreamWriter

一组转换流--->字节和字符之间的转换。 InputStreamReader:字节转换成字符的桥梁 OutputStreamWriter:字符转换成字节的桥梁

i)BufferedReader,BufferedWriter

带有缓冲区的字符流。 1)保存hello,您好时指定编码方式。 取数据时也指定编码方式。 2)采用这种方式完成文件的拷贝工作。

j)FileReader和FileWriter

针对文件的字符流

k)PrintWriter,PrintStream

都是输出流,可以进行格式化输出 PrintWriter:即可以包装字符类,也可以包装字节流。 PrintStream即可以输出字符,也可以输出字节

l)File对象
m)RandomAccessFile

在文件的任意位置进行读和写的操作 seek(long),read(),writer(); 当操作大文件的时候使用该类。

四. 字节输入流和输出流概述

在java.io包中,java.io.InputStream表示字节输入流,java.io.OutputStream表示字节输出流,它们都是抽象类,不能被实例化。

InputStream类提供了一系列和读取数据有关的方法:
  1. read(): 从输入流读取数据:有三种重载形式:  a)int read(): 从输入流读取一个8位的字节,把它转换为0-255之间的整数,并返回这一整数。例如,如果读到的字节为9,则返回9,如果读到 的字节为-9,则返回247。如果遇到输入流的结尾,则返回-1; b)int read(byte[] b): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。返回的整数表示读取的字节数。如果遇到输入流的结尾,则返回-1; c)int read(byte[] b, int off, int len): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。 返回的整数表示读取的字节数。参数off指定在字节数组中开始保存数据的起始下标,参数len指定读取的字节数目。返回的整数表示实现读取的字节数。如果遇到输入流的结尾,则返回-1;以上第一个read方法从输入流读取一个字节,而其余两个read方法从输入流批量读取若干字节。在从文件或键盘读数据时,采用后面两个read方法可以减少进行物理读文件或键盘的次数,因此能提高I/O操作的效率。
  2. void close(): 关闭输入流,InputStream类本身的close()方法不执行任何操作。它的一些子类覆盖了close()方法,在close()方法中释放和流有关的系统资源。
  3. int available(): 返回可以从输入流中读取的字节数目;
  4. skip(long): 从输入流中跳过参数n指定数目的字节。
  5. boolean markSupported(),void mark(int),void reset(): 如果要从流中重复读入数据,先用markSupported()方法来判断这个流是否支持重复读入数据,如果返回true,则表明可以在流上设置标记。接下来调用mark(int readLimit)方法从流的当前位置开始设置标记。最后调用reset()方法,该方法使输入流重新定位到刚才做了标记的起始位置。这样就可以重复读取做过标记的数据了。
 OuputStream类提供了一系列和写数据有关的方法:
  1. write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write(byte[] b): 把参数b指定的字节数组中的所有字节写到输流; c)void write(byte[] b, int off, int len): 把参数b指定的字节数组中的所有字节写到输出流,参数off指定字节数组的起始下标,从这个位置开始输出由参数len指定数目的字节; 以上第一个write方法从输出流写入一个字节,而其余两个write方法从输出流批量写出若干字节。在向文件或控制台写数据时,采用后面两个write方法可以减少进行物理读文件或键盘的次数,因此能提高I/O操作的效率。
  2. void close(): 关闭输出流,OutputStream类本身的close()方法不执行任何操作。它的一些子类覆盖了close()方法,在close()方法中释放和流有关的系统资源。
  3. void flush(): OutputStream类本身的flush()方法不执行任何操作,它的一些带有缓冲区的子类(比如BufferedOutputStream和PrintStream类)覆盖了flush()方法。通过带缓冲区的输出流写数据时,数据先保存在缓冲区中,积累到一定程度才会真正写到输出流中。缓冲区通常用字节数组实现,实际上是指一块内存空间。flush()方法强制把缓冲区内的数据写到输出中。

五:IO操作的步骤

1)选择合适的流 2)创建流对象 3)进行读写的操作 4)关闭资源

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:流的概念
  • 二:流的分类
  • 三:常用流
  • 四. 字节输入流和输出流概述
  • 五:IO操作的步骤
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档