Java基础知识之ByteArrayInputStream流的使用

目录
  • Java ByteArrayInputStream流
    • 一、ByteArrayInputStream流定义
    • 二、ByteArrayInputStream流实例域
    • 三、ByteArrayInputStream流构造函数
    • 四、ByteArrayInputStream流方法
    • 五、ByteArrayInputStream流的作用
  • ByteArrayInputStream的用法解析

Java ByteArrayInputStream流

一、ByteArrayInputStream流定义

API说明:ByteArrayInputStream包含一个内部缓冲区,其中包含可以从流中读取的字节,内部计数器跟踪read方法提供的下一个字节,关闭ByteArrayInputStream流无效,关闭流后调用类的方法不会有异常产生

二、ByteArrayInputStream流实例域

 /**
     * 字节数组缓冲区,buf[0]到buf[count-1]是可以从流中读取的字节,buf[pos]是读取的下一字节
     */
    protected byte buf[];

    /**
     *读取字节的索引
     */
    protected int pos;

    /**
     * 流中当前标记的位置,默认标记为0,可以通过mark方法设置新的标记点,而后通过reset方法将当前位置设置为标记点
     * 从标记点开始读取数据
     *
     * @since   JDK1.1
     */
    protected int mark = 0;

    /**
     * 索引结束位置+1,不大于缓冲区的长度
     */
    protected int count;

三、ByteArrayInputStream流构造函数

 /**
     * 使用指定字节数组创建ByteArrayInputStream流,字节数组为流的缓冲区,
     * 当前位置索引pos初始值是0,索引结束位置count的是buf的长度
     */
    public ByteArrayInputStream(byte buf[]) {
        this.buf = buf;
        this.pos = 0;
        this.count = buf.length;
    }
    /**
     * 使用指定的数组创建ByteArrayInputStream流
     * 目标数组为流的缓冲区数组
     * 缓冲区当前起始位置变量值为off
     * 缓冲区的索引结束位置为:buf.length和off+length的最小值
     */
    public ByteArrayInputStream(byte buf[], int offset, int length) {
        this.buf = buf;
        this.pos = offset;
        this.count = Math.min(offset + length, buf.length);
        this.mark = offset;
    }

四、ByteArrayInputStream流方法

1)read():从此输入流中读取下一个字节并返回,当流到达末尾时,返回-1

 /**
     * 从此输入流中读取下一个字节并返回
     * 当流到达末尾时,返回-1
     * 注意& 0xff是字节的补码操作,暂时不用理会
     */
    public synchronized int read() {
        return (pos < count) ? (buf[pos++] & 0xff) : -1;
    }

2)read(byte b[], int off, int len):从输入流中读取最多len个字节到目标数组中,返回实际读取的字节数

   /**
     * 从输入流中读取最多len个字节到目标数组中,返回实际读取的字节数
     * 当缓冲区中剩余字符数小于len个字节时,读取缓冲区剩余字符数
     * 当剩余字符数大于len个字节时,读取len个字节
     */
    public synchronized int read(byte b[], int off, int len) {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        }

        if (pos >= count) {
            return -1;
        }

        int avail = count - pos;
        if (len > avail) {
            len = avail;
        }
        if (len <= 0) {
            return 0;
        }
        System.arraycopy(buf, pos, b, off, len);
        pos += len;
        return len;
    }

3)close():关闭流无效,关闭后调用其它方法不会有异常

    /**
     * 关闭流无效,关闭后调用其它方法不会有异常
     */
    public void close() throws IOException {
    }

五、ByteArrayInputStream流的作用

暂时不理解具体作用,不清楚什么时候会用到该流,因为实际项目暂未用到,故先了解其功能即可

ByteArrayInputStream的用法解析

看下面这个程序,看懂了就会了

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
public class Test4 {
 //ByteArrayInputStream本身操作的是一个数组,并没有打开文件描述之类的,所有不需要关闭流

 public static void main(String[] args) {
  ByteArrayInputStream bais=null;
  StringBuilder sb=new StringBuilder();
  int temp=0;
  int num=0;
  long date1=System.currentTimeMillis();
  try{
   byte[] b="abcdefghijklmnopqstuvxyz".getBytes();
   //从字符数组b中读取数据,从下标为2开始计数读8个
   bais=new ByteArrayInputStream(b,2,8);
   while((temp=bais.read())!=-1){
    sb.append((char)temp);
    num++;
   }
      System.out.println(sb);
      System.out.println("读取的字节数:"+num);
  }finally{
   try{
    bais.close();//不需要关闭流的,但是调用close没有任何影响,close不做任何事情
   }catch(IOException e){
    e.printStackTrace();
   }
   new File("d:"+File.separator+"a.txt");//File.separator是一个文件分隔符,在windows和linux平台下运行都没有问题
  }
  long date2=System.currentTimeMillis();
  System.out.println("耗时:"+(date2-date1));
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java基础知识之ByteArrayOutputStream流的使用

    目录 Java ByteArrayOutputStream流的使用 一.ByteArrayOutputStream流定义 二.ByteArrayOutputStream流实例域 三.ByteArrayOutputStream流构造函数 四.ByteArrayOutputStream流方法 五.ByteArrayOutputStream流的作用 ByteArrayOutputStream 理解 ByteArrayOutputStream的用法 ByteArrayInputStream的用法 Jav

  • Java基础知识之CharArrayWriter流的使用

    目录 Java CharArrayWriter流 一.CharArrayWriter流定义 二.CharArrayWriter流构造函数 三.CharArrayWriter流实例域 四.CharArrayWriter流方法 四.CharArrayWriter流的作用 Java基础之什么是CharArrayWriter 下面的例子阐述了CharArrayWriter Java CharArrayWriter流 一.CharArrayWriter流定义 API说明:该类实现了一个可用作字符输出流的字

  • ByteArrayInputStream简介和使用_动力节点Java学院整理

    ByteArrayInputStream 介绍 ByteArrayInputStream 是字节数组输入流.它继承于InputStream. 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节:通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的. 我们都知道,InputStream通过read()向外提供接口,供它们来读取字节数据:而ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方

  • Java 8 Stream流强大的原理

    目录 1.Stream的组成与特点 2.BaseStream接口 3.Stream接口 4.关闭流操作 5.并行流和串行流 6.ParallelStream背后的男人:ForkJoinPool 7.用ForkJoinPool的眼光来看ParallelStream 8.并行流的性能 9.NQ模型 10.遇到顺序 前言: Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象. Stream API可以极大提高Java程序员的生产力,让程

  • Java IO流之StringWriter和StringReader用法分析

    简介 StringWriter和StringReader分别继承自Writer和Reader抽象类,作用就是将字符串String类型适配到StringWriter和StringReader类. 其中StringWriter实际上是用StringBuffer实现的,StringBuffer是一个线程安全的类,实际上默认的是16个字符的char数组.所以通过方法write()和append()等其他重载的方法.将字符串添加到StringBuffer中,可以调用toString()或者getBuffe

  • Java基础知识之StringWriter流的使用

    目录 Java StringWriter流的使用 一.StringWriter流定义 二.StringWriter流实例域 三.StringWriter流构造函数 四.StringWriter流方法 五.StringWriter流的作用 使用StringWriter和StringReader的好处 Java StringWriter流的使用 一.StringWriter流定义 API说明:在字符串缓冲区中收集输出的字符流,可用于构造字符串, 关闭流无效,关闭后调用其他方法不会报异常 二.Stri

  • Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重复读取配置文件的方法

    ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据.在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去.具体用法如下: ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组. ByteA

  • Java基础知识之ByteArrayInputStream流的使用

    目录 Java ByteArrayInputStream流 一.ByteArrayInputStream流定义 二.ByteArrayInputStream流实例域 三.ByteArrayInputStream流构造函数 四.ByteArrayInputStream流方法 五.ByteArrayInputStream流的作用 ByteArrayInputStream的用法解析 Java ByteArrayInputStream流 一.ByteArrayInputStream流定义 API说明:B

  • java基础知识I/O流使用详解

    "流"概念源于UNIX中的管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等,它屏蔽了实际的I/O设备中处理数据的细节.   一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL. 流的方向是重要的,根据流的方向,流可以分为两类:输入流和输出流.其实输入/输出是想对于内存来说的.实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对于输入流,可不必

  • java基础知识之FileInputStream流的使用

    目录 一.File流概念 二.FileInputStream 1)FileInputStream概念 2)构造方法 3)FileInputStream常用API 三.三种read方法效率比较 一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念 FileInputStream

  • Java基础知识之StringReader流的使用

    目录 Java StringReader流的使用 一.StringReader流定义 二.StringReader的实例域 三.StringReader流构造函数 四.StringReader流的API 五.StringReader流的作用 StringReader分析 IO流分类图 StringReader Java StringReader流的使用 一.StringReader流定义 API说明:字符串输入流.其本质就是字符串 二.StringReader的实例域 //流对象 private

  • Java基础知识之CharArrayReader流的使用

    目录 Java CharArrayReader流 一.CharArrayReader流定义 二.CharArrayReader流的构造函数 三.CharArrayReader流的实例域 四.CharArrayReader流的API 四.CharArrayReader流的作用 什么是CharArrayReader Java CharArrayReader流 一.CharArrayReader流定义 API说明:该类实现了一个可用作字符输入流的字符缓冲区,即该类可利用字符缓冲区当做字符输入流进行读取

  • Java基础知识之BufferedReader流的使用

    目录 一.BufferedReader类概念 二.BufferedReader类实例域 三.BufferedReader类构造函数 四.BufferedReader类API 五.BufferedReader类与InputStreamReader类比较 一.BufferedReader类概念 API文档描述: BufferedReader类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行 可以通过构造函数指定缓冲区大小也可以使用默认大小.对于大多数用途,默认值足够大 由Reader构

  • Java基础知识汇总

    Java基础知识 1.Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4)提供了对web应用的支持 5)具有较好的安全性(数组边界检测.Bytecode检测)和健壮性(强制型机制.垃圾回收器.异常处理) 6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承) 2.java与c++的异同: 1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台 2)Jave为纯面向对象,c++既面向对象又能面向过

随机推荐