]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/engine/ReadAheadBuffer.java
Add read-ahead buffer to decompress in parallel.
[DictionaryPC.git] / src / com / hughes / android / dictionary / engine / ReadAheadBuffer.java
1 // Copyright 2017 Reimar Döffinger
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package com.hughes.android.dictionary.engine;
16
17 import java.io.InputStream;
18 import java.io.IOException;
19 import java.io.PipedInputStream;
20 import java.io.PipedOutputStream;
21
22 public class ReadAheadBuffer extends PipedInputStream {
23     static int BLOCK_SIZE = 1024 * 1024;
24     public ReadAheadBuffer(InputStream in, int size) {
25         super(size);
26         assert size >= 2 * BLOCK_SIZE;
27         this.in = in;
28         try {
29             pipe = new PipedOutputStream(this);
30             buffer = new byte[BLOCK_SIZE];
31             new Thread(new Runnable() {
32                 public void run() {
33                     int read;
34                     try {
35                         while ((read = in.read(buffer)) > 0)
36                         {
37                             pipe.write(buffer, 0, read);
38                             pipe.flush();
39                         }
40                     } catch (IOException e) {}
41                     try {
42                         pipe.close();
43                     } catch (IOException e) {}
44                 }
45             }).start();
46         } catch (IOException e) {}
47     }
48
49     InputStream in;
50     PipedOutputStream pipe;
51     byte buffer[];
52 }