]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/engine/ReadAheadBuffer.java
3c4c10d0aeebf2442a69fda3ba5619e94adc7c8b
[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.IOException;
18 import java.io.InputStream;
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         try {
28             pipe = new PipedOutputStream(this);
29         } catch (IOException e) {}
30         new Thread(new Runnable() {
31             public void run() {
32                 try {
33                     int read;
34                     final byte buffer[] = new byte[BLOCK_SIZE];
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     }
47
48     PipedOutputStream pipe;
49 }