程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 解析Java的InputStream類並借助其讀取ppt文件

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

編輯:關於JAVA

解析Java的InputStream類並借助其讀取ppt文件。本站提示廣大學習愛好者:(解析Java的InputStream類並借助其讀取ppt文件)文章只能為提供參考,不一定能成為您想要的結果。以下是解析Java的InputStream類並借助其讀取ppt文件正文


1. 關於InputStream.read()
     在從數據流裡讀取數據時,為圖簡略,常常用InputStream.read()辦法。這個辦法是從流裡每次只讀取讀取一個字節,效力會異常低。     更好的辦法是用InputStream.read(byte[] b)或許InputStream.read(byte[] b,int off,int len)辦法,一次讀取多個字節。


2. 關於InputStream類的available()辦法
    要一次讀取多個字節時,常常用到InputStream.available()辦法,這個辦法可以在讀寫操作前先得知數據流裡有若干個字節可以讀取。須要留意的是,假如這個辦法用在從本
地文件讀取數據時,普通不會碰到成績,但假如是用於收集操作,就常常會碰到一些費事。好比,Socket通信時,對方明明發來了1000個字節,然則本身的法式挪用available()辦法卻只獲得900,或許100,乃至是0,感到有點莫明其妙,怎樣也找不到緣由。其實,這是由於收集通信常常是連續性的,一串字節常常分幾批停止發送。當地法式挪用available()辦法有時獲得0,這能夠是對方還沒有呼應,也能夠是對方曾經呼應了,然則數據還沒有投遞當地。對方發送了1000個字節給你,或許分紅3批達到,這你就要挪用3次available()辦法能力將數據總數全體獲得。
      假如如許寫代碼:

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

      在停止收集操作時常常失足,由於你挪用available()辦法時,對發發送的數據能夠還沒有達到,你獲得的count是0。
         須要改成如許:

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

3. 關於InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)

這兩個辦法都是用來從流裡讀取多個字節的,有經歷的法式員就會發明,這兩個辦法常常 讀取不到本身想要讀取的個數的字節。好比第一個辦法,法式員常常願望法式能讀取到b.length個字節,而現實情形是,體系常常讀取不了這麼多。細心浏覽Java的API解釋就發明了,這個辦法 其實不包管能讀取這麼多個字節,它只能包管最多讀取這麼多個字節(起碼1個)。是以,假如要讓法式讀取count個字節,最好用以下代碼:

 byte[] b = new byte[count];
 int readCount = 0; // 曾經勝利讀取的字節的個數
 while (readCount < count) {
  readCount += in.read(bytes, readCount, count - readCount);
 }

      用這段代碼可以包管讀取count個字節,除非半途碰到IO異常或許到了數據流的開頭(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();//為了獲得幻燈片的文字內容,樹立TextRun 
  for(int j=0;j<t.length;j++){ 
   content.append(t[j].getText());//這裡會將文字內容加到content中去 
  } 
  content.append(slides[i].getTitle()); 
  } 
  index.AddIndex(url, title, content.toString()); 
 }catch(Exception ex){ 
  System.out.println(ex.toString()); 
 } 
 return null; 
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved