IO流

文件的几种创建方式和删除:

IO流的概念:

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的类都在IO包中

流按流向分为两种:输入流,输出流。

流按操作类型分为两种:

字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的

字符流 : 字符流只能操作纯字符数据,比较方便。

java中流的体系图:

IO流常用父类:

字节流的抽象父类:InputStream          OutputStream

字符流的抽象父类:Reader                   Writer

IO流中的输入输出流以及流的关闭

关流的正确方式:

输入流与输出流的区别:当你去输出的时候,文件不存在会帮我们自动创建,当我们去输入的时候,文件不存在就会报错

文件的赋值:

例1:一个一个字节存(很慢)

例2:用数组存放:

flush和close方法的区别

flush()方法

用来刷新缓冲区的,刷新后可以再次写出

close()方法

用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出

文件加密:

文件追加

BufferedInputStream/BufferOutputStream(仅作了解)

A:缓冲思想

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,

这是加入了数组这样的缓冲区效果,java本身在设计的时候,

B.BufferedInputStream

BufferedInputStream内置了一个缓冲区(数组)

从BufferedInputStream中读取一个字节时

BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个

程序再次读取时, 就不用找文件了, 直接从缓冲区中获取

直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个

C.BufferedOutputStream

BufferedOutputStream也内置了一个缓冲区(数组)

程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中

直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里

D.拷贝的代码

```java FileInputStream fis = new FileInputStream("致青春.mp3");

//创建文件输入流对象,关联致青春.mp3

BufferedInputStream bis = new BufferedInputStream(fis);

//创建缓冲区对fis装饰

FileOutputStream fos = new FileOutputStream("copy.mp3");

//创建输出流对象,关联copy.mp3

BufferedOutputStream bos = new BufferedOutputStream(fos);

//创建缓冲区对fos装饰

int b;

while((b = bis.read()) != -1) {

            bos.write(b);

}

bis.close();

//只关装饰后的对象即可 bos.close(); ```

E.小数组的读写和带Buffered的读取哪个更快?

定义小数组如果是8192个字节大小和Buffered比较的话

定义小数组会略胜一筹,因为读和写操作的是同一个数组

而Buffered操作的是两个数组

对象输入流:(创建对象不一定会调用构造器,调用构造器一定会创建对象)

将对象写入流里面这个过程称为序列化,如果一个对象要序列化那么这个对象的类就必须实现序列化接口Serializable 的类所产生的对象才能够写入流

当把一个容器序列化,那么该容器的数据也会被序列化

如果一个对象要序列化那么这个对象的类就必须实现序列化接口

只有实现了序列化接口的类所产生的对象才能写入流

从流中将对象读取出来的过程被称为反序列化,不会去调用对象的构造器 

序列化与反序列化:

        序列化:将对象转换成字节序列

        反序列化:从字节序列中恢复对象     从流中读取对象

ByteArrayOutPutStream:内存输出流 (输入流不需要掌握)

DataOutputStream DataInputStream数据输出输入流(用的不是很多,但是需要掌握):这个流一般用来读取基本数据类型,可以写到内存中也可以写到文件中  怎么存就怎么取,例如以byte写入文件,读文件以byte去读

字符流:

FileReader:

BufferedReader:

FileWriter:(这个流已经不常用了)

PrintWriter:(常用):

BufferedWriter:(不常用)

两种方式实现键盘录入

A:BufferedReader的readLine方法。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

B:Scanner

例:

RandomAccessFile随机读取流(必须掌握):RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。支持对随机访问文件的读取和写入。


Properties

A:Properties的概述

Properties 类表示了一个持久的属性集。

Properties 可保存在流中或从流中加载。

属性列表中每个键及其对应值都是一个字符串。

B:案例演示Properties作为Map集合的使用 

Properties的特殊功能使用

A:Properties的特殊功能

public Object setProperty(String key,String value)

public String getProperty(String key)

public Enumeration stringPropertyNames()



你可能感兴趣的:(IO流)