class Simple8BitZipEncoding extends java.lang.Object implements ZipEncoding
These restrictions most notably apply to the most prominent
omissions of java-1.4's Charset
implementation, Cp437 and Cp850.
The methods of this class are reentrant.
Modifier and Type | Class and Description |
---|---|
private static class |
Simple8BitZipEncoding.Simple8BitChar
A character entity, which is put to the reverse mapping table
of a simple encoding.
|
Modifier and Type | Field and Description |
---|---|
private char[] |
highChars
The characters for byte values of 128 to 255 stored as an array of
128 chars.
|
private java.util.List |
reverseMapping
A list of
Simple8BitZipEncoding.Simple8BitChar objects sorted by the unicode
field. |
Constructor and Description |
---|
Simple8BitZipEncoding(char[] highChars) |
Modifier and Type | Method and Description |
---|---|
boolean |
canEncode(java.lang.String name)
Check, whether the given string may be losslessly encoded using this
encoding.
|
boolean |
canEncodeChar(char c) |
java.lang.String |
decode(byte[] data) |
char |
decodeByte(byte b)
Return the character code for a given encoded byte.
|
java.nio.ByteBuffer |
encode(java.lang.String name)
Encode a filename or a comment to a byte array suitable for
storing it to a serialized zip entry.
|
private Simple8BitZipEncoding.Simple8BitChar |
encodeHighChar(char c) |
boolean |
pushEncodedChar(java.nio.ByteBuffer bb,
char c)
Pushes the encoded form of the given character to the given byte buffer.
|
private final char[] highChars
private final java.util.List reverseMapping
Simple8BitZipEncoding.Simple8BitChar
objects sorted by the unicode
field. This list is used to binary search reverse mapping of
unicode characters with a character code greater than 127.public Simple8BitZipEncoding(char[] highChars)
highChars
- The characters for byte values of 128 to 255
stored as an array of 128 chars.public char decodeByte(byte b)
b
- The byte to decode.public boolean canEncodeChar(char c)
c
- The character to encode.public boolean pushEncodedChar(java.nio.ByteBuffer bb, char c)
bb
- The byte buffer to write to.c
- The character to encode.false
is returned, nothing is pushed to the
byte buffer.private Simple8BitZipEncoding.Simple8BitChar encodeHighChar(char c)
c
- A unicode character in the range from 0x0080 to 0x7f00null
value is returned, if this character is not
covered by this encoding.public boolean canEncode(java.lang.String name)
ZipEncoding
canEncode
in interface ZipEncoding
name
- A filename or ZIP comment.ZipEncoding.canEncode(java.lang.String)
public java.nio.ByteBuffer encode(java.lang.String name)
ZipEncoding
Examples for CP 437 (in pseudo-notation, right hand side is C-style notation):
encode("?_for_Dollar.txt") = "%U20AC_for_Dollar.txt" encode("?lf?sser.txt") = "\231lf\204sser.txt"
encode
in interface ZipEncoding
name
- A filename or ZIP comment.%Uxxxx
. It is
assumed, that the byte buffer is positioned at the
beginning of the encoded result, the byte buffer has a
backing array and the limit of the byte buffer points
to the end of the encoded result.ZipEncoding.encode(java.lang.String)
public java.lang.String decode(byte[] data) throws java.io.IOException
decode
in interface ZipEncoding
data
- The byte values to decode.java.io.IOException
ZipEncoding.decode(byte[])