File内部存储

注意File的内部存储不是存储在内存里,而是不可更改容量的内置的那部分存储器上

FileOutputStream和FileInputStream

主要用到两个流 一个是FileOutputStream 另一个是FileInputStream ,它们的父类分别是OutputStream和InputStream,这两个流(OutputStream和InputStream)是所有输出流/输入流的抽象基类,其本身并不能创建实例来执行输入输出.

其中输出流(output)提供写方法 write(),向存储器/数据库中写入数据;输入流(input)提供读方法 read(),向存储器/数据库中读出数据.

输入流和输出流在输入输出完毕时都不要忘记关闭它们!!!

使用java i/o流执行输出时,不要忘记关闭输出流,关闭输出流除了可以保证流的物理资源被回收以外,还可以将输出流缓存区中的数据flush到物理结点里.因为在执行close()方法之前,自动执行输出流的flush()方法

结点流和处理流

节点流:可以向一个特定的IO设备(网络,磁盘)读/写数据的流

处理流:用于对一个已经存在的流进行连接和封装,通过封装后的流来实现数据读写的功能.当使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源,随着处理流所包装结点流的变化,程序实际访问的数据源也相应发生变化.使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入/输出功能,处理流也被称为包装流

OutputStreamWriter和InputStreamReader类的作用

输入输出体系中提供了两个转换流,这两个转换流用于实现将字节流转换成字符流,其中:

InputStreamReader:是Reader的子类,将字节输入流转换成字符输入流

OutputStreamWriter:是Writer的子类,将字节输出流转换成字符输出流

字节流比字符流的使用范围更广,但是字符流比字节流使用更方便


1

举例来说,java使用System.in代表标准输入,即键盘输入,这个标准输入流是InputStream类的实例(字节流的实例),使用起来不是很方便,而且键盘输入内容都是文本内容,即可以使用转换流InputStreamReader将其转换成字符输入流,使用普通的Reader读取输入内容时依然不太方便,可以将普通的Reader再次包装成BufferdReader(包装流,处理流),利用BufferdReader的readLine()方法可以一次读取一行内容

简单的理解为就是: (拿访问文件的输入输出流举例!)

字节输入流 ---->转换流(字节输入流转换成字符输入流)------->缓冲流    

FileInputStream------------InputStreamReader-----------------BufferedReader  {readLine();}

字节输出流 ---->转换流(字节输出流转换成字符输出流)------->缓冲流 

FileOutputStream------------OutputStreamWriter--------------------BufferedWriter {write(String s)}


2

最后不管如何,虽然是以字符的输出流形式操作了字节的输出流,但实际上还是以字节的形式输出,而字符的输入流,虽然以字符的形式操作,但实际上还是使用的字节流,也就是说,传输或者是从文件中读取数据的时候,文件中真正保存的数据永远是字节


3


4


5

通过使用处理流,java程序无须理会输入/输出节点是磁盘,网络还是其他的输入/输出设备,程序只要将这些节点流包装成处理流,就可以使用相同的输入/输出代码来读写不同的输入/输出设备的名称.

6


7


8


9

你可能感兴趣的:(File内部存储)