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

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

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

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


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

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

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

      用這段代碼可以保證讀取count個字節(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());//這里會將文字內(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國際化文件在jar包外生效問題

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

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

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

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

    完美解決java.lang.OutOfMemoryError處理錯誤的問題

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

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

    這篇文章主要介紹了Java?網(wǎng)絡(luò)編程?——?Socket?相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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)長,請大家耐心看完
    2022-05-05
  • SpringBoot如何指定某些類優(yōu)先啟動

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

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

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

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

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

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

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

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

    解決spring-boot2.0.6中webflux無法獲得請求IP的問題

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

最新評論

麻栗坡县| 永胜县| 栾城县| 互助| 陕西省| 重庆市| 广南县| 光泽县| 睢宁县| 自贡市| 将乐县| 柯坪县| 当涂县| 和田市| 东乌| 广昌县| 伽师县| 琼中| 高淳县| 江陵县| 新宁县| 华容县| 普宁市| 屯昌县| 罗平县| 从化市| 靖西县| 广饶县| 桐庐县| 张北县| 四会市| 藁城市| 安化县| 乌恰县| 乐业县| 嫩江县| 蓝田县| 怀安县| 鄂伦春自治旗| 蒙城县| 于都县|