常用输入字节流InputStream介绍

输入字节流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介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java字符流与字节流区别与用法分析

    本文实例讲述了Java字符流与字节流区别与用法.分享给大家供大家参考,具体如下: 字节流与字符流主要的区别是他们的的处理方式 流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先. 2.Java的字符流 Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先. InputStream,OutputStream,Reader,writer都是抽象类.所以不能直接new 字节流是最基本的,所有的Inpu

  • Java中IO流 字节流实例详解

    Java中IO流 字节流实例详解 IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络-),即是将数据源读入到程序的通信通道. 输出流:程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络-)的通信通道. 字节流 1.InputStream.OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据

  • java IO 字节流详解及实例代码

    java IO 字节流详解 1.         如何理解输入输出流? 这是我当初在学习Java IO这一块很难理解的一块,输入输出流我们可必须以一个为参照物:我们以内存为参照物,凡是写入内存的我们叫输入流,从内存中写出的我们叫输出流.看下面的示例图 有了这样的一个概念对于我们再学习Java中的IO流我相信就会变得特别简单了. 2.         再看流的分类 流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕.流分类的方式很多: 1.按照输入的方向分,输入流和输出流,输入输出的参

  • 常用输入字节流InputStream介绍

    输入字节流InputStream的一系列实现,以下是五种较常用的子类 1.字节数组作为输入源--ByteArrayInputStream 该类包括两个构造方法 ByteArrayInputStream(byte[] buf); ByteArrayInputStream(byte[] buf,int offset,int length ); 该类重写了InputStream中的所有方法,因此我们可以调用其父类同名的方法进行读写操作. 下面是如何通过一个字节数组创建字节输入流的过程,并从输入流中读取

  • Javascript的console['']常用输入方法汇总

    1.console.log是最常用的输入方法,正常化输出语句,还具有print占位符整数(%d||%i),浮点数(%f),对象(%o),字符(%s); 2.console.error输出错误化的语句 3.console.info输出一条信息化语句 4.console.warn输出警告化的语句 5.console.dir可以查看语句里的信息 6.console.group输入分组 7.console.assert判断参数是否为真(==代表值相同就行,===代表值和类型都相同) 8.console.

  • maven三个常用的插件使用介绍

    目录 背景 SpringBoot 打包时排除文件 Spring 打包本地依赖 jar 编译时排除指定文件 复制粘贴的原则 总结 背景 maven 常用的三个插件对打包有不同的作用: maven-jar-plugin:处理 jar 包生成: spring-boot-maven-plugin:SpringBoot 项目打包: maven-assembly-plugin:自定义打包结构. 而实际开发过程中这三个插件可能都综合使用,本文类介绍混合使用这些插件时需要注意的事项. SpringBoot 打包

  • Kafka 常用命令行详细介绍及整理

     Kafka 常用命令行详细介绍及整理 以下是kafka常用命令行总结: 1.查看topic的详细信息 ./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ1 2.为topic增加副本 ./kafka-reassign-partitions.sh -zookeeper 127.0.0.1:2181 -reassignment-json-file json/partitions-to-move.json -execu

  • 常用正则表达式匹配代码介绍

    正则表达式,又称正规表示法.常规表示法.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. /* 人民币金额校验 */ var testRMB = function(v) { var reg = /^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/; return reg.te

  • Linux下find和grep常用命令及区别介绍

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区别的. 区别: (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等. (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找. 一.find命令 基本格式:find  path expression 1.按照文件名查找 (1)find / -name httpd.conf #在根目录下查找文件htt

  • Java语言Lang包下常用的工具类介绍

    无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等.我们就从这个包开始介绍整个 common 项

  • linux环境中常用的mysql命令介绍

    进入mysql命令: mysql -u+(用户名) -p+(密码 ) mysql语句命令后面一定要加":" 查询库名: show databases: 修改库: use 库名: 创建库: create database [if not exists][库名]; 查询创建库: show create database [库名]; 查询创建表: show create table [表名]: 查询表: desc [表名]: 查询当前所使用的库: select database(): 创建表

  • linux中的常用命令与快捷键介绍

    目录 1 系统介绍 2 系统快捷方式 3 常用系统命令 1 系统介绍 1.ping 格式: ping [网址] # 判断系统是否可以正常连网 2.主机登录用户信息 [root@localhost ~]# root : 登录当前系统的用户名 @ : 分隔符,没有特殊含义 localhost : 当前系统的主机名 ~ : 当前所在的目录(~ 代表的是当前的家目录, /root) # : 没有实际含义 3.自定义系统登录用户信息 PS1 环境变量 [root@localhost ~]# echo $P

  • PostgreSQL常用优化技巧示例介绍

    目录 1.标量子查询与filter 2.视图合并 3.谓词推入 1.标量子查询与filter 当一个查询在select和from之间,那么这种子查询就是标量子查询.实际应用中,很多人在写SQL时为了方便会写一堆标量子查询的SQL,在表数据不大时,一般并不会有什么影响,但当数据量较大时,往往会对性能造成巨大影响. 因为标量子查询类似于一个天然的嵌套循环,而且驱动表固定为主表.如下所示: bill=# explain select empno,ename,sal,deptno, bill-# (se

随机推荐