• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * BCJEncoder
3  *
4  * Author: Lasse Collin <lasse.collin@tukaani.org>
5  *
6  * This file has been put into the public domain.
7  * You can do whatever you want with this file.
8  */
9 
10 package org.tukaani.xz;
11 
12 class BCJEncoder extends BCJCoder implements FilterEncoder {
13     private final BCJOptions options;
14     private final long filterID;
15     private final byte[] props;
16 
BCJEncoder(BCJOptions options, long filterID)17     BCJEncoder(BCJOptions options, long filterID) {
18         assert isBCJFilterID(filterID);
19         int startOffset = options.getStartOffset();
20 
21         if (startOffset == 0) {
22             props = new byte[0];
23         } else {
24             props = new byte[4];
25             for (int i = 0; i < 4; ++i)
26                 props[i] = (byte)(startOffset >>> (i * 8));
27         }
28 
29         this.filterID = filterID;
30         this.options = (BCJOptions)options.clone();
31     }
32 
getFilterID()33     public long getFilterID() {
34         return filterID;
35     }
36 
getFilterProps()37     public byte[] getFilterProps() {
38         return props;
39     }
40 
supportsFlushing()41     public boolean supportsFlushing() {
42         return false;
43     }
44 
getOutputStream(FinishableOutputStream out, ArrayCache arrayCache)45     public FinishableOutputStream getOutputStream(FinishableOutputStream out,
46                                                   ArrayCache arrayCache) {
47         return options.getOutputStream(out, arrayCache);
48     }
49 }
50