KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pdfbox > filter > ASCIIHexFilter


1 /**
2  * Copyright (c) 2003, www.pdfbox.org
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  * 3. Neither the name of pdfbox; nor the names of its
14  * contributors may be used to endorse or promote products derived from this
15  * software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * http://www.pdfbox.org
29  *
30  */

31 package org.pdfbox.filter;
32
33 import java.io.IOException JavaDoc;
34 import java.io.InputStream JavaDoc;
35 import java.io.OutputStream JavaDoc;
36
37 import org.pdfbox.cos.COSDictionary;
38
39 import org.pdfbox.persistence.util.COSHEXTable;
40
41 /**
42  * This is the used for the ASCIIHexDecode filter.
43  *
44  * @author <a HREF="mailto:ben@benlitchfield.com">Ben Litchfield</a>
45  * @version $Revision: 1.8 $
46  */

47 public class ASCIIHexFilter implements Filter
48 {
49
50     /**
51      * This will decode some compressed data.
52      *
53      * @param compressedData The compressed byte stream.
54      * @param result The place to write the uncompressed byte stream.
55      * @param options The options to use to encode the data.
56      *
57      * @throws IOException If there is an error decompressing the stream.
58      */

59     public void decode( InputStream JavaDoc compressedData, OutputStream JavaDoc result, COSDictionary options ) throws IOException JavaDoc
60     {
61         int value =0;
62         int firstByte = 0;
63         int secondByte = 0;
64         while( (firstByte = compressedData.read()) != -1 )
65         {
66             value = REVERSE_HEX[firstByte] * 16;
67             secondByte = compressedData.read();
68             if( secondByte >= 0 )
69             {
70                 value += REVERSE_HEX[ secondByte ];
71             }
72             result.write( value );
73         }
74         result.flush();
75     }
76
77     private static final int[] REVERSE_HEX =
78     {
79         -1, //0
80
-1, //1
81
-1, //2
82
-1, //3
83
-1, //4
84
-1, //5
85
-1, //6
86
-1, //7
87
-1, //8
88
-1, //9
89
-1, //10
90
-1, //11
91
-1, //12
92
-1, //13
93
-1, //14
94
-1, //15
95
-1, //16
96
-1, //17
97
-1, //18
98
-1, //19
99
-1, //20
100
-1, //21
101
-1, //22
102
-1, //23
103
-1, //24
104
-1, //25
105
-1, //26
106
-1, //27
107
-1, //28
108
-1, //29
109
-1, //30
110
-1, //31
111
-1, //32
112
-1, //33
113
-1, //34
114
-1, //35
115
-1, //36
116
-1, //37
117
-1, //38
118
-1, //39
119
-1, //40
120
-1, //41
121
-1, //42
122
-1, //43
123
-1, //44
124
-1, //45
125
-1, //46
126
-1, //47
127
0, //48
128
1, //49
129
2, //50
130
3, //51
131
4, //52
132
5, //53
133
6, //54
134
7, //55
135
8, //56
136
9, //57
137
-1, //58
138
-1, //59
139
-1, //60
140
-1, //61
141
-1, //62
142
-1, //63
143
-1, //64
144
10, //65
145
11, //66
146
12, //67
147
13, //68
148
14, //69
149
15, //70
150
-1, //71
151
-1, //72
152
-1, //73
153
-1, //74
154
-1, //75
155
-1, //76
156
-1, //77
157
-1, //78
158
-1, //79
159
-1, //80
160
-1, //81
161
-1, //82
162
-1, //83
163
-1, //84
164
-1, //85
165
-1, //86
166
-1, //87
167
-1, //88
168
-1, //89
169
-1, //90
170
-1, //91
171
-1, //92
172
-1, //93
173
-1, //94
174
-1, //95
175
-1, //96
176
10, //97
177
11, //98
178
12, //99
179
13, //100
180
14, //101
181
15, //102
182
};
183
184     /**
185      * This will encode some data.
186      *
187      * @param rawData The raw data to encode.
188      * @param result The place to write to encoded results to.
189      * @param options The options to use to encode the data.
190      *
191      * @throws IOException If there is an error compressing the stream.
192      */

193     public void encode( InputStream JavaDoc rawData, OutputStream JavaDoc result, COSDictionary options ) throws IOException JavaDoc
194     {
195         int byteRead = 0;
196         while( (byteRead = rawData.read()) != -1 )
197         {
198             int value = (byteRead+256)%256;
199             result.write( COSHEXTable.TABLE[value] );
200         }
201         result.flush();
202     }
203 }
Popular Tags