Java面向对象编程-第16章Java I/O系统

来源:互联网 发布:大数据相关论坛 编辑:程序博客网 时间:2024/05/21 17:18

第16章 Java I/O系统
在Java中,把一组有序的数据序列称为流。流可以分为输入流和输出流。程序从输入流读取数据,向输出流写入数据。
Java的I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中。按照数据流中最小的数据单元可以分为字节流和字符流等。类库中的InputStream和OutputStream对应字节流,Reader和Writer对应字符流。
一、输入流和输出流概述
类库包中的InputStream表示字符输入流,OutputStream表示字符输出流,都是抽象类,不能实例化。
InputStream类提供了一系列和读取数据相关的方法:
1、int read():从输入流读取数据,主要有以下3种重载形式:
(1)int read():从输入流中读取一个8位的字节,并转换为0-255之间的整数,返回。如果读取遇到输入流的结尾,则返回-1。
(2)int read(byte[] b):从输入流读取若干个字节,并存储到参数指定的字节数组,返回读取的字节数。如遇到结尾返回-1。
(3)int read(byte[] b,int off,int len):从输入流读取若干个字节,保存到b中。参数off指定在字节数组中开始保存数据的起始下标,参数len指定读取的字节数量。返回实际读取的字节数,如果遇到结尾,返回-1。
2、void close():关闭输入流。当完成所有读操作后,应当关闭输入流。
3、int available():返回可以从输入流中读取的字节数目。
4、skip(long n):从输入流中跳过n个字节。
同样OutputStream类提供了写操作相关方法:
1、void write():向输入流中写入数据,同样有3种重载形式:
(1)void write(int b):向输出流中写入一个字节。
(2)void write(byte[] b):把参数b指定的字节数组中的所有字节写到输出流。
(3)void write(byte[] b,int off,int len):把参数b指定的字节数组中的若干字节写到输出流,off指定字节数组的起始下标,从这个位置开始输出len个字节。
2、void close():关闭输出流。
3、void flush():强制把缓冲区的数据写到输出流中。

*为保证输入流或输出流及时关闭,一般都把关闭流的代码放到finally代码块中,I/O操作通常采用以下流程:

InputStream in;OutputStream out;try{  处理输入流;  处理输出流;}catch(IOException e){  处理IO异常;}finally{  in.close();  out.close();}

二、输入流
所有字节输入流都是InputStream类的直接或间接子类。几种主要类型有:
1、ByteArrayInputStream:把字节数组转换为输入流。
2、FileInputStream:从文件中读取数据。
3、PipedInputStream:连接一个PipedOutputStream。
4、SequenceInputStream:把几个输入流转换为一个输入流。
(一)字节数组输入流:ByteArrayInputStream类
ByteArrayInputStream类从内存中的字节数组中读取数据,其数据源是一个字节数组,其构造方法包括:
(1)ByteArrayInputStream(byte[] buf):参数buf指定字节数组类型的数据源。
(2)ByteArrayInputStream(byte[] buf,int offset,int length):参数buf指定字节数组类型的数据源,参数offset指定从数组中开始读数据的起始下标位置,length指定读取字节数。

import java.io.*;public class ByteArrayTester {    public static void main(String[] args)throws IOException{        byte[] buff=new byte[]{2,15,67,-1,-9,9};        ByteArrayInputStream in= new ByteArrayInputStream(buff,1,4);        int data=in.read();        while(data!=-1){            System.out.print(data+" ");            data=in.read();        }        in.close();     }}

运行结果为:15 67 255 247
因为对于数据源中的-1和-9本为字节型8位数据,转为data的int型后数值发生变化。
(二)文件输入流:FileInputStream类
FileInputStream类从文件中读取数据,有以下构造方法:
(1)FileInputStream(File file):参数file指定文件数据源。
(2)FileInputStream(String name):参数指定文件数据源的路径信息。

0 0
原创粉丝点击