最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎(chǔ)知識(shí)之ByteArrayInputStream流的使用

 更新時(shí)間:2021年12月13日 15:00:31   作者:咕嚕是個(gè)大胖子  
這篇文章主要介紹了Java基礎(chǔ)知識(shí)之ByteArrayInputStream流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java ByteArrayInputStream流

一、ByteArrayInputStream流定義

API說(shuō)明:ByteArrayInputStream包含一個(gè)內(nèi)部緩沖區(qū),其中包含可以從流中讀取的字節(jié),內(nèi)部計(jì)數(shù)器跟蹤read方法提供的下一個(gè)字節(jié),關(guān)閉ByteArrayInputStream流無(wú)效,關(guān)閉流后調(diào)用類的方法不會(huì)有異常產(chǎn)生

二、ByteArrayInputStream流實(shí)例域

 /**
     * 字節(jié)數(shù)組緩沖區(qū),buf[0]到buf[count-1]是可以從流中讀取的字節(jié),buf[pos]是讀取的下一字節(jié)
     */
    protected byte buf[];
 
    /**
     *讀取字節(jié)的索引
     */
    protected int pos;
 
    /**
     * 流中當(dāng)前標(biāo)記的位置,默認(rèn)標(biāo)記為0,可以通過(guò)mark方法設(shè)置新的標(biāo)記點(diǎn),而后通過(guò)reset方法將當(dāng)前位置設(shè)置為標(biāo)記點(diǎn)
     * 從標(biāo)記點(diǎn)開(kāi)始讀取數(shù)據(jù)
     *
     * @since   JDK1.1
     */
    protected int mark = 0;
 
    /**
     * 索引結(jié)束位置+1,不大于緩沖區(qū)的長(zhǎng)度
     */
    protected int count;

三、ByteArrayInputStream流構(gòu)造函數(shù)

 /**
     * 使用指定字節(jié)數(shù)組創(chuàng)建ByteArrayInputStream流,字節(jié)數(shù)組為流的緩沖區(qū),
     * 當(dāng)前位置索引pos初始值是0,索引結(jié)束位置count的是buf的長(zhǎng)度
     */
    public ByteArrayInputStream(byte buf[]) {
        this.buf = buf;
        this.pos = 0;
        this.count = buf.length;
    } 
    /**
     * 使用指定的數(shù)組創(chuàng)建ByteArrayInputStream流
     * 目標(biāo)數(shù)組為流的緩沖區(qū)數(shù)組
     * 緩沖區(qū)當(dāng)前起始位置變量值為off
     * 緩沖區(qū)的索引結(jié)束位置為: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():從此輸入流中讀取下一個(gè)字節(jié)并返回,當(dāng)流到達(dá)末尾時(shí),返回-1

 /**
     * 從此輸入流中讀取下一個(gè)字節(jié)并返回
     * 當(dāng)流到達(dá)末尾時(shí),返回-1
     * 注意& 0xff是字節(jié)的補(bǔ)碼操作,暫時(shí)不用理會(huì)
     */
    public synchronized int read() {
        return (pos < count) ? (buf[pos++] & 0xff) : -1;
    }

2)read(byte b[], int off, int len):從輸入流中讀取最多l(xiāng)en個(gè)字節(jié)到目標(biāo)數(shù)組中,返回實(shí)際讀取的字節(jié)數(shù)

   /**
     * 從輸入流中讀取最多l(xiāng)en個(gè)字節(jié)到目標(biāo)數(shù)組中,返回實(shí)際讀取的字節(jié)數(shù)
     * 當(dāng)緩沖區(qū)中剩余字符數(shù)小于len個(gè)字節(jié)時(shí),讀取緩沖區(qū)剩余字符數(shù)
     * 當(dāng)剩余字符數(shù)大于len個(gè)字節(jié)時(shí),讀取len個(gè)字節(jié)
     */
    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():關(guān)閉流無(wú)效,關(guān)閉后調(diào)用其它方法不會(huì)有異常

    /**
     * 關(guān)閉流無(wú)效,關(guān)閉后調(diào)用其它方法不會(huì)有異常
     */
    public void close() throws IOException {
    }

五、ByteArrayInputStream流的作用

暫時(shí)不理解具體作用,不清楚什么時(shí)候會(huì)用到該流,因?yàn)閷?shí)際項(xiàng)目暫未用到,故先了解其功能即可

六、ByteArrayInputStream的用法解析

看下面這個(gè)程序,看懂了就會(huì)了

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
public class Test4 {
 //ByteArrayInputStream本身操作的是一個(gè)數(shù)組,并沒(méi)有打開(kāi)文件描述之類的,所有不需要關(guān)閉流
 
 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();
   //從字符數(shù)組b中讀取數(shù)據(jù),從下標(biāo)為2開(kāi)始計(jì)數(shù)讀8個(gè)
   bais=new ByteArrayInputStream(b,2,8);
   while((temp=bais.read())!=-1){
    sb.append((char)temp);
    num++;
   }
      System.out.println(sb);
      System.out.println("讀取的字節(jié)數(shù):"+num);
  }finally{
   try{
    bais.close();//不需要關(guān)閉流的,但是調(diào)用close沒(méi)有任何影響,close不做任何事情
   }catch(IOException e){
    e.printStackTrace();
   }
   new File("d:"+File.separator+"a.txt");//File.separator是一個(gè)文件分隔符,在windows和linux平臺(tái)下運(yùn)行都沒(méi)有問(wèn)題
  }
  long date2=System.currentTimeMillis();
  System.out.println("耗時(shí):"+(date2-date1)); 
 } 
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java8之Lambda表達(dá)式使用解讀

    Java8之Lambda表達(dá)式使用解讀

    這篇文章主要介紹了Java8之Lambda表達(dá)式使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 關(guān)于spring boot中幾種注入方法的一些個(gè)人看法

    關(guān)于spring boot中幾種注入方法的一些個(gè)人看法

    這篇文章主要給大家介紹了關(guān)于spring boot中幾種注入方法的一些個(gè)人看法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • SpringBoot接受參數(shù)相關(guān)注解方式

    SpringBoot接受參數(shù)相關(guān)注解方式

    SpringBoot接受參數(shù)的注解包括@PathVariable、@RequestHeader、@RequestParameter、@CookieValue、@RequestBody、@RequestAttribute和@SessionAttribute等,每個(gè)注解都有詳細(xì)的使用方法和示例代碼
    2024-12-12
  • 一文深入了解Java中的AtomicInteger類

    一文深入了解Java中的AtomicInteger類

    AtomicInteger是java并發(fā)包下面提供的原子類,主要操作的是int類型的整型,通過(guò)調(diào)用底層Unsafe的CAS等方法實(shí)現(xiàn)原子操作,這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文深入了解Java中AtomicInteger類的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能

    利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能

    這篇文章主要介紹了利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java 運(yùn)算符詳情

    Java 運(yùn)算符詳情

    這篇文章主要介紹了Java 運(yùn)算符,Java 中的運(yùn)算符與 C 語(yǔ)言基本一致。下面文章就圍繞Java 中的運(yùn)算符的相關(guān)資料展開(kāi)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Mybatis-Plus中的MetaObjectHandler組件的使用

    Mybatis-Plus中的MetaObjectHandler組件的使用

    MetaObjectHandler是Mybatis-Plus中一個(gè)實(shí)用組件,專門用于自動(dòng)處理實(shí)體對(duì)象中的特定字段,如創(chuàng)建時(shí)間、更新時(shí)間、創(chuàng)建人和修改人等,該接口允許開(kāi)發(fā)者在不修改業(yè)務(wù)代碼的情況下,實(shí)現(xiàn)自動(dòng)填充功能,極大地簡(jiǎn)化了代碼的復(fù)雜性,感興趣的可以了解一下
    2024-10-10
  • Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“)

    這篇文章主要介紹了Java獲取項(xiàng)目路徑方式System.getProperty(“user.dir“),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • IDEA SSM整合Redis項(xiàng)目實(shí)例 附源碼

    IDEA SSM整合Redis項(xiàng)目實(shí)例 附源碼

    今天給大家普及IDEA SSM整合Redis項(xiàng)目實(shí)例,包括pom.xml 配置和spring-redis.xml 配置代碼,代碼也很簡(jiǎn)單,通過(guò)項(xiàng)目實(shí)際案例能更好的幫助大家理解,需要的朋友可以參考下
    2021-06-06
  • 淺談Java中Spring Boot的優(yōu)勢(shì)

    淺談Java中Spring Boot的優(yōu)勢(shì)

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢(shì)以及相關(guān)知識(shí)點(diǎn)內(nèi)容,興趣的朋友們可以學(xué)習(xí)參考下。
    2018-09-09

最新評(píng)論

卓资县| 大宁县| 元朗区| 大邑县| 沙田区| 七台河市| 光山县| 武穴市| 自治县| 中宁县| 乌鲁木齐县| 江阴市| 峨边| 正宁县| 古交市| 昭平县| 全椒县| 西乌| 肥城市| 漳浦县| 皋兰县| 聂拉木县| 冀州市| 宜宾市| 偏关县| 长岭县| 砚山县| 原阳县| 韩城市| 辽中县| 呈贡县| 侯马市| 临清市| 保山市| 葵青区| 永泰县| 南丹县| 呼伦贝尔市| 旺苍县| 延吉市| 洛川县|