首页 > 编程 > Java > 正文

常用输入字节流InputStream介绍

2019-11-26 11:35:09
字体:
来源:转载
供稿:网友

输入字节流InputStream的一系列实现,以下是五种较常用的子类

1、字节数组作为输入源――ByteArrayInputStream

该类包括两个构造方法

ByteArrayInputStream(byte[] buf);ByteArrayInputStream(byte[] buf,int offset,int length );

该类重写了InputStream中的所有方法,因此我们可以调用其父类同名的方法进行读写操作。

下面是如何通过一个字节数组创建字节输入流的过程,并从输入流中读取数据输出到操作台。

import java.io.ByteArrayInputStream;import java.io.IOException;public class TestByteArrayInputStream { public static void main(String[] args) throws IOException {  // 初始化字节数组  byte[] buf = new byte[3];  buf[0] = 100;  buf[1] = 101;  buf[2] = 102;  // 创建输入流  ByteArrayInputStream input = new ByteArrayInputStream(buf);  // 从输入流中读取数据  byte[] out = new byte[3];  input.read(out);  System.out.println(new String(out));  // 关闭输入流  input.close(); }}

2、文件作为输入源――FileInputStream

FileInputStream从文件系统中的某个文件中获取输入字节,适用于读取诸如图像数据之类的原始数据流。有一下两种创建方法:

FileInputStream(File file);//通过系统中的File对象file指定FileInputStream(String name);//通过系统中路径名name指定同样的我们使用重写的InputStream中的方法的名称来实现读文件内容。

下面是如何读取磁盘文件来创建一个文件输入流,循环读取该数据流中的数据并输数据到控制台。

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestFileInputStream { public static void main(String[] args) throws FileNotFoundException {  try {   // 创建输入流   FileInputStream input = new FileInputStream("D:/demo/test.txt");   // 从输入流中读取数据   while (input.available() > 0) {    int out = input.read();    System.out.println((char) out);   }   // 关闭输入流   input.close();  } catch (IOException e) {   e.printStackTrace();  } }}

3、对象作为输入源――ObjectInputStream

ObjectInputStream与FileInputStream一起使用时,可以为应用程序提供对对象图形的持久储存。

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.ObjectInputStream;import java.sql.Date;public class TestObjectInputStream { public static void main(String[] args) throws ClassNotFoundException {  try {   // 创建文件输入流   FileInputStream file = new FileInputStream("D:/demo?test.tmp");   // 创建对象输入流   ObjectInputStream object = new ObjectInputStream(file);   // 读取对象的数据   int i = object.readInt();   String string = (String) object.readObject();   Date date = (Date) object.readObject();   System.out.println("i=" + i);   System.out.println("string=" + string);   System.out.println("date=" + date);   // 关闭流   object.close();   file.close();  } catch (FileNotFoundException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } }}

4、字符串作为输入源――StringBufferInputStream

StringBufferInputStream允许输入流由字符串内容提供,与ByteArrayInputStream使用字节数组作为输入源类似,但是只有一种构造方法:

StringBufferInputStream(String s); //以从指定字符串读取数据

只需要一个字符串作为输入就可以创建,以下是一个实例:

import java.io.IOException;import java.io.StringBufferInputStream;public class TestStringBufferInputStream { public static void main(String[] args) {  // 创建输入流  StringBufferInputStream input = new StringBufferInputStream("Hello World!");  // 从输入流中读取数据  while (input.available() > 0) {   int out = input.read();   System.out.print((char) out);  }  // 关闭输入流  try {   input.close();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } }}

5、缓存输入流――BufferedInputStream

BufferedInputStream为另一个输入流添加一些功能,即缓存输入功能。在创建BufferedInputStream时,会创建一个内部缓存区间数组。在读取或者跳过流中字节时,可根据需要从包含的输入流在此填充该内部缓存区,一次填充多个字节。

如果你需要一个具有缓存的文件输入流,则应当组合使用FileInputStream和BufferedInputStream,这将能提高读取效率。

下面一段代码是将文件输入流对象转换成缓存输入流的过程:

import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestBufferedInputStream { private void mian() {  // TODO Auto-generated method stub  try {   // 创建文件输入流   FileInputStream input = new FileInputStream("D:/demo/test.txt");   BufferedInputStream buffer = new BufferedInputStream(input);   // 从输入流中读取数据   while (buffer.available() > 0) {    int out = buffer.read();    System.out.print((char) out);   }   // 关闭流   buffer.close();   input.close();  } catch (FileNotFoundException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } }}

以上这篇常用输入字节流InputStream介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表