###前提・実現したいこと
PDFファイルからの文字データ読み出しを作成していたのですが、"stream"~"endstream"で囲まれたバイナリデータ部分がFlateDecodeというZIP形式で圧縮されていて読むことが出来ません。
そこでバイナリデータ部のみを切り出したテキストファイルからバイナリデータを読み込みjava.util.zip.Inflaterを用いて解凍するプログラムを作成しているのですが、一通り組み終わり実行したところエラーメッセージがでてうまく進めることが出来ない状態です。
###発生している問題・エラーメッセージ
Exception in thread "main" java.util.zip.DataFormatException: invalid code lengths set at java.util.zip.Inflater.inflateBytes(Native Method) at java.util.zip.Inflater.inflate(Inflater.java:259) at java.util.zip.Inflater.inflate(Inflater.java:280) at ProcessFlateDecode.ProcessFlateDecode.main(ProcessFlateDecode.java:37)
###該当のソースコード
java
1import java.io.FileInputStream; 2import java.util.ArrayList; 3import java.util.zip.Inflater; 4 5class ProcessFlateDecode { 6 7 public static void main(String[] args) throws Exception{ 8 9 ArrayList<Integer> list = new ArrayList<Integer>(); 10 11 FileInputStream ins = new FileInputStream("file.txt"); 12 13 while(true){ 14 int data = ins.read(); 15 if(data==-1) break; 16 17 list.add( data ); 18 } 19 ins.close(); 20 21 22 int compressedDataLength = list.size(); 23 byte[] output = new byte[compressedDataLength]; 24 for(int i=0; i<list.size(); i++){ 25 Integer o=(Integer)list.get(i); 26 output[i]=(byte)(o.intValue()); 27 } 28 29 Inflater decompresser = new Inflater(); 30 decompresser.setInput(output, 0, compressedDataLength); 31 byte[] result = new byte[100]; 32 int resultLength = decompresser.inflate(result); 33 34 decompresser.end(); 35 36 String outputString = new String(result, 0, resultLength, "UTF-8"); 37 System.out.println(outputString); 38 } 39 40}
###補足情報(言語/FW/ツール等のバージョンなど)
実行環境としてはeclipse4.6Neonを利用しています。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/07 08:54
2016/11/07 10:06
2016/12/13 01:28