欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析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í),為圖簡單,經(jīng)常用InputStream.read()方法。這個方法是從流里每次只讀取讀取一個字節(jié),效率會非常低。     更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次讀取多個字節(jié)。


2. 關(guān)于InputStream類的available()方法
    要一次讀取多個字節(jié)時(shí),經(jīng)常用到InputStream.available()方法,這個方法可以在讀寫操作前先得知數(shù)據(jù)流里有多少個字節(jié)可以讀取。需要注意的是,如果這個方法用在從本
地文件讀取數(shù)據(jù)時(shí),一般不會遇到問題,但如果是用于網(wǎng)絡(luò)操作,就經(jīng)常會遇到一些麻煩。比如,Socket通訊時(shí),對方明明發(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()方法有時(shí)得到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ò)操作時(shí)往往出錯,因?yàn)槟阏{(diào)用available()方法時(shí),對發(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)文章

  • IDEA中用maven連接數(shù)據(jù)庫的教程

    IDEA中用maven連接數(shù)據(jù)庫的教程

    這篇文章主要介紹了IDEA中用maven連接數(shù)據(jù)庫的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java 中接口和抽象類的區(qū)別與對比

    java 中接口和抽象類的區(qū)別與對比

    這篇文章主要介紹了java 中接口和抽象類的區(qū)別與對比的相關(guān)資料,這里詳細(xì)說明他們之家的區(qū)別,需要的朋友可以參考下
    2017-08-08
  • java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析

    java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析

    這篇文章主要為大家介紹了java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • SpringBoot在 POM 中引入本地 JAR 包的方法

    SpringBoot在 POM 中引入本地 JAR 包的方法

    在開發(fā) Spring Boot 應(yīng)用程序時(shí),您可能需要使用本地 JAR 包來添加自定義庫或功能,本文將介紹在 Spring Boot 項(xiàng)目的 POM 文件中如何引入本地 JAR 包,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景

    Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景

    這篇文章主要介紹了Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場景,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java中HashMap獲取值的幾種方式匯總

    Java中HashMap獲取值的幾種方式匯總

    這篇文章主要介紹了Java中HashMap獲取值的幾種方式匯總,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springboot連接neo4j報(bào)錯的解決方案

    springboot連接neo4j報(bào)錯的解決方案

    這篇文章主要介紹了springboot連接neo4j報(bào)錯的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Spring Boot如何支持嵌入式Servlet容器

    Spring Boot如何支持嵌入式Servlet容器

    這篇文章主要介紹了Spring Boot如何支持嵌入式Servlet容器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot手動動態(tài)注入controller和service方式

    springboot手動動態(tài)注入controller和service方式

    這篇文章主要介紹了springboot手動動態(tài)注入controller和service方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot整合mybatis結(jié)合pageHelper插件實(shí)現(xiàn)分頁

    SpringBoot整合mybatis結(jié)合pageHelper插件實(shí)現(xiàn)分頁

    在本篇文章里小編給大家整理的是關(guān)于SpringBoot整合mybatis使用pageHelper插件進(jìn)行分頁操作相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。
    2020-02-02

最新評論