处理字节流的基本类:InputStream和OutputStream流类

Inputstream和Outputstream流类是Java语言中用来处理以位(bit)为单位的流,它除了可以用来处理一些二进制文件(binary file)的数据之外,也可以用来处理文本文件。

1.基本的输入输出流类

InputStream流类

①InputStream流类的常用方法

  • public int read()    从输入流中的当前位置读入一个字节(8b)的二进制数据,然后以此数据为低位字节,配上8个全0的高位字节合成一个16位的整型量(0~255)返回给调用此方法的语句,若输入流中的当前位置没有数据,则返回。
  • public int read(byte[ ] b)    从输入流中的当前位置连续读入多个字节保存在数组b中,同时返回所读到的字节数
  • public int read(byte[]b,int off, int len)    从输入流中的当前位置连续读入len个字节,从数组b的第off+1个元素位置处开始存放,同时返回所读到的字节数
  • public int available()          返回输入流中可以读取的字节数 
  • public long skip(long n)       使位置指针从当前位置向后跳过n个字节
  • public void mark(int readlimit)      在当前位置处做一个标记,并且在输入流中读取readlimit个字节数后该标记失效
  • public void reset()     将位置指针返回到标记的位置
  • public void close()     关闭输入流与外设的连接并释放所占用的系统资源

②OutputStream流类的常用方法

  • public void write(int b)    参数b的低位字节写入到输出流
  • public void write(byte[ ]b)   将字节数组b中的全部字节按顺序写入到输出流
  • public void write(byte[]b,int off,int len)   将字节数组b中第off+1个元素开始的len个数据,顺序地写人到输出流
  • public void flush( )    强制清空缓冲区并执行向外设写操作
  • public void close( )    关闭输出流与外设的连接并释放所占用的系统资源 
     

flush( ) 方法说明:对于缓冲流式输出,write( )方法所写的数据并没有直接传到与输出来。流相连的外设上,而是先暂时存放在流的缓冲区中,等到缓冲区的数据积累到一定的数量,再执行一次向外设的写操作把它们全部写到外设上。这样处理可以降低计算机对外设的读数写次数,提高系统效率。但是在某些情况下,缓冲区中的数据不满时就需要将它们写到外设上,此时应使用flush()方法强制清空缓冲区并执行外设的写操作。

2.输入输出流的应用

①文件的输入输出流

FileInputStream 和 FileOutputStream 分别是 InputStream 和 OutputStream 的直接子类,这两个子类主要是负责完成对本地磁盘文件的顺序输入与输出操作的流。  

FileInputStream类的构造方法

  • public File  InputStream (String name)     以名为name的文件为数据源建立文件输入流。
  • public File  InputStream (File file)      以文件对象file为数据源建立文件输入流。
  • public File  InputStream ( FileDescriptorfdObj )     以文件描述符对象fdObj为输入端建立一个文件输入流 。
  • public  FileOutputStream (String name)    以指定名字的文件为接收端建立文件输出流。
  • public  FileOutputStream (String name,boolean append)    以指定名字的文件为接收端建立文件输出流,并指定写人方式,append为true时输出字节被写到文件的末尾。
  • public  FileOutputStream (File file)    以文件对象file为接收端建立文件输出流。
  • public  FileOutputStream ( FileDescriptorfdObj )    以文件描述符对象fdObj为接收端建立一个文件输出流。

②顺序输入流

顺序输入流类 SequenceInputStream 是 InputStream 的直接子类,其功能是将多个输入流顺序连接在一起,形成单一的输入数据流,没有对应的输出数据流存在。

SequenceInputStream类的构造方法

  •  public  SequenceInputStream ( Enumeration  e)    创建一个串行输入流,连接枚举对象e中的所有输入流
  • public  SequenceInputStream ( InputStreams1 , InputStreams2 )      创建一个串行输入流,连接输入流s1和s2

SequenceInputStream类的常用方法

  • public int available()    返回流中的可读取的字节数
  • public void close( )    关闭输入流
  • public int read()   从输入流中读取字节,遇到EOF就转向下一输入流
  • public int read(byte[ ]b, int off,int len)    将len个数据读到一个字节数组从off开始的位置,
     

③管道输入输出流

管道字节输入流 PipedInputStream 和管道字节输出流 PipedOutputStream 类提供了利用管道方式进行数据输入输出管理的类。管道流用来将一个程序或线程的输出连接到另外一个程序或线程作为输入,使得相连线程能够通过 FipedInputStream 和 PipedOutputStream 流进行数据交换,从而可以实现程序内部线程间的通信或不同程序间的通信。

 PipedInputStream 类的常用方法

  • public int available()   返回可以读取的字节数
  • public void close()关闭管道输入流并释放系统资源
  • public int read()从管道输入流中读取下一字节数据
  • public int read(byte[]b,int off,int len)从管道输入流读取len字节数据到数组
  • protected void receive(int b)从管道中接收1字节数据
  • public void connect( PipedOutputStream  src)连接到指定输出流,管道输入流将从该输出流接收数据

PipedOutputStream 类的常用方法

  • public void close()   关闭管道输出流并释放系统资源
  • public void connect( PipedInputStream  sink)   连接到指定输入流,管道输出流将从该输入流读取数据
  • public void write(int b)   写指定字节数据到管道输出流
  • public void write(byte[]b,int off,int len)   从数组off偏移处写len字节数据到管道输出流
  • public void flush()   刷新输出流并使缓冲区数据全部写出 

④过滤输入输出流

过滤字节输入流类 FilterInputStream 和过滤字节输出流类 FilterOutputStream ,分别实现了在数据的读、写操作的同时进行数据处理,它们是 InputStream 和 OutputStream 类的直接子类。 

FilterInputStream 和 FilterOutputStream 也是两个抽象类,它们又分别派生出数据输入流类Data Innut Stream和数据输出流类Data Output Stream等子类。过滤字节输入输出流的主要特点是,过滤字节输入输出流是建立在基本输入输出流之上,并在输入输出数据的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据的理解和编码转换。
DataInputStream 类的常用方法

  • public boolean  readBoolean ()   从流中读1字节,若字节值非0返回true,否则返回
  • falsepublic byte read Byte()   从流中读1字节,返回该字节值
  • public char readChar()   从流中读取a、b2字节,形成Unicode字符(char)((a<<8)|(b&0xff)
  • public short readShort()   从流中读入2字节的short值并返回
  • public int readInt()   从流中读入4字节的int值并返回
  • public float readFloat()   从流中读入4字节的float值并返回
  • public long read Long()从流中读入8字节的long值并返回
  • public double read Double()从流中读入8字节的double值并返回  
     

DataOutputStream 类的常用方法

  • public void  writeBoolean (boolean v)   若v的值为true,则向流中写入(字节)1,否则写入(字节)0
  • public void writeByte(int v)   向流中写入1字节。写入v的最低1字节,其他字节丢弃
  • public void writeChar(int v)   向流中写入v的最低2字节,其他字节丢弃
  • public void  writeShort (int v)   向流中写入v的最低2字节,其他字节丢弃
  • public void writeInt(int v)   向流中写入参数v的4字节
  • public void  writeFloat (float v)   向流中写入参数v的4字节
  • public void writeLong(long v)   向流中写入参数v的8字节
  • public void  writeDouble (double v)   向流中写入参数v的8字节 

⑤标准输入输出流

System. in、System. out、System,err这三个标准的输入与输出流对象定义在java. lang. System类中,与其他类必须在程序中用import语句引入文件中不同,上述三个对象在Java源程序编译时被自动装载。

  • (1)标准输入:Java语言的标准输入System. in是 BufferedInputStream 类的对象,当程序需要从键盘上读入数据时,只需调用System. in的read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低位字节,高位字节为0的整型数据。需要说明的是,System. in. read()语句应包含在try块中,且try块后面要有一个接收 IOException 异常的catch块。
  • (2)标准输出:Java语言的标准输出System,out是打印输出流 PrintStream 类的对象。 PrintStream 类是过滤字节输出流类 FilterOutputStream 的一个子类,其中定义了向屏幕输送不同类型数据的方法print()和printh()。这两个方法的区别是前者输出数据后不换行,后者换行。System. out对应的输出流通常指显示器、打印机或磁盘文件等信息输出设备。
  • (3)标准错误输出:标准错误输出System. err用于为用户显示错误信息。也是由 PrintStream 类派生的错误流。err流的作用是使用方法print()或printh()将信息输出到err流并显示在屏幕上,以方便用户使用和调试程序。err也使用与out同样的方法,如“System,err. printin("这是一个错误");”。但err与标准输出out不同的是,err会立即显示指定的(错误)信息让用户知道,即使指定程序将结果重新定位到文件,err输出的信息也不会被重新定位,而仍会显示在显示设备上。
     

(本文内容均摘自《Java程序设计基础(第六版)》。此文仅为学习总结。)
 

你可能感兴趣的:(java,开发语言,后端)