]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/engine/ReadAheadBuffer.java
Minor automated code simplifications.
[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(() -> {
31             try {
32                 int read;
33                 final byte[] buffer = new byte[BLOCK_SIZE];
34                 while ((read = in.read(buffer)) > 0)
35                 {
36                     pipe.write(buffer, 0, read);
37                     pipe.flush();
38                 }
39             } catch (IOException e) {}
40             try {
41                 pipe.close();
42             } catch (IOException e) {}
43         }).start();
44     }
45
46     PipedOutputStream pipe;
47 }