JAVA BIO 回顾

来源:互联网 发布:手机电玩城刷分币软件 编辑:程序博客网 时间:2024/06/07 02:43

应用程序难免会有输入和输出,输入输出的对象包括内存、文件、网络等,Java.io包就是用于进行这个工作的,但是这个包也并没有处理所有的输入输出类型,比如GUI或网页上的输出。

1.关于输入和输出流
我们通常将OutputStream称为输出流,表示我们可以向其中写入数据;把InputStream称为输入流,可以从其中读取数据;输出流需要和一个可以写入数据的目标媒介相关联,输入流需要和一个能够读取数据的数据源相关联。常见的有:文件、管道、内存、网络连接、System.in、System.out、System.err等。上面提到了流的概念,从概念上来说,流可以认为是一个连续的数据,你既可以从流中读取数据也可以向其中写入数据。在Java IO根据读写单位的不同可以分为字节流、字符流。也就是说我们总是通过InputStream和Reader流从数据源来读取数据,通过OutputStream和Writer来向目标媒介写入数据。最后一个问题就是Java IO为什么会包含那么多不同的类,这是因为Java 为不同的媒介(数据源)分别提供了不同的类,包括文件访问、网络访问、内存缓存访问、线程内部通信(管道)、缓冲、过滤、解析、读写文本 (Readers / Writers)、读写基本类型数据 (long, int etc.)、读写对象

2.文件读写
读文件:二进制文件可以使用FileInputStream来读取,可以一次读取一个字节(此时返回这个字符的ascii码)或将读取的内容装到传入的一个字符数组中去。文本文件文件可以使用FileReader读取,可以一次读取一个字符(返回的还是编码对应的数字)或将读取的内容写入到传入的字符数组中去。
写文件:如果要写入的是二进制数据,可以使用FileOutputStream,可以一次写入一个字节或写入一个字节数组;如果写入的是文本数据,则使用FileWriter,可以一次写入一个字符或写入一个字符数组。
数据会按照写入的顺序存储在文件中。
随机存储:RandomAccessFile可以实现对文件的随机存储,这里的随机指的是可以从指定的位置进行读写操作,而并不是说读写的位置是随机的。通过这个类,我们可以覆盖文件的一部分、读取文件中间的一部分、在文件的末尾追加一些数据。
文件和目录信息的获取:可以通过File类来获取文件或目录的一些信息,比如文件的类型、大小,目录下的文件列表。这里需要注意File对象并不实际代表一个文件或目录,它只代表一个包含相关信息的逻辑对象,所以我们不能通过File对象来对文件进行读写操作。

3.管道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信能力,所以管道也可以作为数据源和目标媒介进行操作。unix/Linux中的管道可以为运行与不同地址空间的进程进行通信,而Java中只能用于同进程下的线程通信。管道一般只能传递字节/字符数据,如果需要在线程间传递完整对象的话,可以选择其它通信方式。具体的来说 ,可以通过PipeInputStream和PipeOutputSteam、PipeReader和PipeWriter来创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来;这种关联关系可以在创建的时候指定,也可以通过他们的connect方法进行管理,PipedInputStream和PipedOupputStream都有一个connect方法。注意,使用两个相关联的管道流时,务必将他们分配给不同的线程。因为read()和write()方法调用时会阻塞,则意味着如果在一个线程中同时进行读写,可能会造成线程死锁。

4.网络
对网络进行数据操作和文件没有什么不一样,当使用Java API建立了网络连接以后,再获取其InputStream和OutPutStream就可以进行数据的读写了。本质上操作的还是InputStream和OutputStream。

关于各个具体类之间的具体作用可以参考之前的博客:http://blog.csdn.net/acm_lkl/article/details/46775867

原创粉丝点击