Java InputStream类
java.io.InputStream类是所有Java IO输入流的基类,它是以字节为单位的输出流。
定义
public abstract class InputStream extends Object implements Closeable
此抽象类是表示字节输入流的所有类的超类。需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。
类图
BufferedInputStream: 提供了缓冲功能。
DataInputStream: 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
PipedInputStream: 允许以管道的方式来处理流。当连接到一个PipedOutputStream后,它会读取后者输出到管道的数据。
PushbackInputStream: 允许放回已经读取的数据。
SequenceInputStream: 能对多个inputstream进行顺序处理。
方法
InputStream.available() 返回输入流的字节数长度和大小
InputStream.read() 读取数据流字节,存储到缓冲区数组
InputStream.close() 关闭输入流并释放与该流关联的所有系统资源
InputStream.mark(int readlimit) 标记输入流中当前的位置
InputStream.markSupported() 测试此输入流是否支持mark 和reset 方法
InputStream.reset() 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置
InputStream.skip(long n) 跳过和丢弃此输入流中数据的 n 个字节
例子
public class InputStreamDemo01{ public static void main(String args[]) throws Exception{ // 异常抛出,不处理 // 第1步、使用File类找到一个文件 File f= new File("d:" + File.separator + "test.txt") ; // 声明File对象 // 第2步、通过子类实例化父类对象 InputStream input = null ; // 准备好一个输入的对象 input = new FileInputStream(f) ; // 通过对象多态性,进行实例化 // 第3步、进行读操作 byte b[] = new byte[1024] ; // 所有的内容都读到此数组之中 input.read(b) ; // 读取内容 网络编程中 read 方法会阻塞 // 第4步、关闭输出流 input.close() ; // 关闭输出流 System.out.println("内容为:" + new String(b)) ; // 把byte数组变为字符串输出 } };
总结
1. 如果你正在开发一个从流中读取数据的组件,请尝试用InputStream替代任何它的子类(比如FileInputStream)进行开发。这么做能够让你的代码兼容任何类型而非某种确定类型的输入流。
2. Java中的Inputstream是不能重复读取的,它的读取是单向的,因为读取的时候,会有一个pos指针,他指示每次读取之后下一次要读取的起始位置,当读到最后一个字符的时候,pos指针不会重置。
3. 如果想要重复使用InputStream对象,可以先把InputStream转化成ByteArrayOutputStream,后面要使用InputStream对象时,再从ByteArrayOutputStream转化回来就好了。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。