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

解析Java的InputStream類并借助其讀取ppt文件

 更新時(shí)間:2015年11月13日 17:39:17   作者:MyFavorite  
這篇文章主要介紹了Java的InputStream類并借助其讀取ppt文件,講到了InputStream類中一些常用的方法的問題,需要的朋友可以參考下

1. 關(guān)于InputStream.read()
     在從數(shù)據(jù)流里讀取數(shù)據(jù)時(shí),為圖簡(jiǎn)單,經(jīng)常用InputStream.read()方法。這個(gè)方法是從流里每次只讀取讀取一個(gè)字節(jié),效率會(huì)非常低。     更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次讀取多個(gè)字節(jié)。


2. 關(guān)于InputStream類的available()方法
    要一次讀取多個(gè)字節(jié)時(shí),經(jīng)常用到InputStream.available()方法,這個(gè)方法可以在讀寫操作前先得知數(shù)據(jù)流里有多少個(gè)字節(jié)可以讀取。需要注意的是,如果這個(gè)方法用在從本
地文件讀取數(shù)據(jù)時(shí),一般不會(huì)遇到問題,但如果是用于網(wǎng)絡(luò)操作,就經(jīng)常會(huì)遇到一些麻煩。比如,Socket通訊時(shí),對(duì)方明明發(fā)來了1000個(gè)字節(jié),但是自己的程序調(diào)用available()方法卻只得到900,或者100,甚至是0,感覺有點(diǎn)莫名其妙,怎么也找不到原因。其實(shí),這是因?yàn)榫W(wǎng)絡(luò)通訊往往是間斷性的,一串字節(jié)往往分幾批進(jìn)行發(fā)送。本地程序調(diào)用available()方法有時(shí)得到0,這可能是對(duì)方還沒有響應(yīng),也可能是對(duì)方已經(jīng)響應(yīng)了,但是數(shù)據(jù)還沒有送達(dá)本地。對(duì)方發(fā)送了1000個(gè)字節(jié)給你,也許分成3批到達(dá),這你就要調(diào)用3次available()方法才能將數(shù)據(jù)總數(shù)全部得到。
      如果這樣寫代碼:

 int count = in.available();
 byte[] b = new byte[count];
 in.read(b);

      在進(jìn)行網(wǎng)絡(luò)操作時(shí)往往出錯(cuò),因?yàn)槟阏{(diào)用available()方法時(shí),對(duì)發(fā)發(fā)送的數(shù)據(jù)可能還沒有到達(dá),你得到的count是0。
         需要改成這樣:

 int count = 0;
 while (count == 0) {
  count = in.available();
 }
 byte[] b = new byte[count];
 in.read(b);

3. 關(guān)于InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)

這兩個(gè)方法都是用來從流里讀取多個(gè)字節(jié)的,有經(jīng)驗(yàn)的程序員就會(huì)發(fā)現(xiàn),這兩個(gè)方法經(jīng)常 讀取不到自己想要讀取的個(gè)數(shù)的字節(jié)。比如第一個(gè)方法,程序員往往希望程序能讀取到b.length個(gè)字節(jié),而實(shí)際情況是,系統(tǒng)往往讀取不了這么多。仔細(xì)閱讀Java的API說明就發(fā)現(xiàn)了,這個(gè)方法 并不保證能讀取這么多個(gè)字節(jié),它只能保證最多讀取這么多個(gè)字節(jié)(最少1個(gè))。因此,如果要讓程序讀取count個(gè)字節(jié),最好用以下代碼:

 byte[] b = new byte[count];
 int readCount = 0; // 已經(jīng)成功讀取的字節(jié)的個(gè)數(shù)
 while (readCount < count) {
  readCount += in.read(bytes, readCount, count - readCount);
 }

      用這段代碼可以保證讀取count個(gè)字節(jié),除非中途遇到IO異?;蛘叩搅藬?shù)據(jù)流的結(jié)尾(EOFException)

4.讀取PowerPoint文件的例子

import java.io.InputStream; 
 
import org.apache.lucene.document.Document; 
import org.apache.poi.hslf.HSLFSlideShow; 
import org.apache.poi.hslf.model.TextRun; 
import org.apache.poi.hslf.model.Slide; 
import org.apache.poi.hslf.usermodel.SlideShow; 
 
public Document getDocument(Index index, String url, String title, InputStream is) 
throws DocCenterException { 
 StringBuffer content = new StringBuffer(""); 
 try{ 
  SlideShow ss = new SlideShow(new HSLFSlideShow(is));//is 為文件的InputStream,建立SlideShow 
  Slide[] slides = ss.getSlides();//獲得每一張幻燈片 
  for(int i=0;i<slides.length;i++){ 
  TextRun[] t = slides[i].getTextRuns();//為了取得幻燈片的文字內(nèi)容,建立TextRun 
  for(int j=0;j<t.length;j++){ 
   content.append(t[j].getText());//這里會(huì)將文字內(nèi)容加到content中去 
  } 
  content.append(slides[i].getTitle()); 
  } 
  index.AddIndex(url, title, content.toString()); 
 }catch(Exception ex){ 
  System.out.println(ex.toString()); 
 } 
 return null; 
} 

相關(guān)文章

  • SpringBoot集成I18n國(guó)際化文件在jar包外生效問題

    SpringBoot集成I18n國(guó)際化文件在jar包外生效問題

    這篇文章主要介紹了SpringBoot集成I18n國(guó)際化文件在jar包外生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java synchronized加載加鎖-線程可重入詳解及實(shí)例代碼

    java synchronized加載加鎖-線程可重入詳解及實(shí)例代碼

    這篇文章主要介紹了java synchronized加載加鎖-線程可重入詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 完美解決java.lang.OutOfMemoryError處理錯(cuò)誤的問題

    完美解決java.lang.OutOfMemoryError處理錯(cuò)誤的問題

    下面小編就為大家?guī)硪黄昝澜鉀Qjava.lang.OutOfMemoryError處理錯(cuò)誤的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 老生常談Java?網(wǎng)絡(luò)編程?——?Socket?詳解

    老生常談Java?網(wǎng)絡(luò)編程?——?Socket?詳解

    這篇文章主要介紹了Java?網(wǎng)絡(luò)編程?——?Socket?相關(guān)知識(shí),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)

    Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)

    本文主要講述的是面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài),內(nèi)容含括從封裝到繼承再到多態(tài)的所有重點(diǎn)內(nèi)容以及使用細(xì)節(jié)和注意事項(xiàng),內(nèi)容有點(diǎn)長(zhǎng),請(qǐng)大家耐心看完
    2022-05-05
  • SpringBoot如何指定某些類優(yōu)先啟動(dòng)

    SpringBoot如何指定某些類優(yōu)先啟動(dòng)

    這篇文章主要介紹了SpringBoot如何指定某些類優(yōu)先啟動(dòng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java解決刪除字符使頻率相同問題

    Java解決刪除字符使頻率相同問題

    給你一個(gè)下標(biāo)從0開始的字符串 word ,字符串只包含小寫英文字母,你需要選擇一個(gè)下標(biāo)并刪除下標(biāo)處的字符,使得word中剩余每個(gè)字母出現(xiàn)頻率相同,本文給大家介紹了Java解決刪除字符使頻率相同問題,需要的朋友可以參考下
    2024-02-02
  • java WebSocket實(shí)現(xiàn)聊天消息推送功能

    java WebSocket實(shí)現(xiàn)聊天消息推送功能

    這篇文章主要為大家詳細(xì)介紹了java WebSocket實(shí)現(xiàn)聊天消息推送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Spring MVC的項(xiàng)目準(zhǔn)備和連接建立方法

    Spring MVC的項(xiàng)目準(zhǔn)備和連接建立方法

    SpringWebMVC是基于Servlet API的Web框架,屬于Spring框架的一部分,主要用于簡(jiǎn)化Web應(yīng)用程序的開發(fā),SpringMVC通過控制器接收請(qǐng)求,使用模型處理數(shù)據(jù),并通過視圖展示結(jié)果,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 解決spring-boot2.0.6中webflux無法獲得請(qǐng)求IP的問題

    解決spring-boot2.0.6中webflux無法獲得請(qǐng)求IP的問題

    這幾天在用 spring-boot 2 的 webflux 重構(gòu)一個(gè)工程,寫到了一個(gè)需要獲得客戶端請(qǐng)求 IP 的地方,在寫的過程中遇到很多問題,下面小編通過一段代碼給大家介紹解決spring-boot2.0.6中webflux無法獲得請(qǐng)求IP的問題,感興趣的朋友跟隨小編一起看看吧
    2018-10-10

最新評(píng)論

武强县| 罗山县| 尼玛县| 施甸县| 元阳县| 双城市| 花垣县| 清原| 长岛县| 大连市| 铁力市| 五华县| 邻水| 嘉义市| 余姚市| 彭泽县| 渝中区| 梁河县| 陵水| 客服| 昆山市| 安平县| 札达县| 汽车| 凤冈县| 新泰市| 襄汾县| 永靖县| 武隆县| 宣恩县| 山西省| 营山县| 金坛市| 吴川市| 依安县| 长葛市| 五常市| 青岛市| 开鲁县| 黄浦区| 云南省|