01: /*
02: * @(#)ByteToCharISO8859_1.java 1.24 06/10/10
03: *
04: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
05: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
06: *
07: * This program is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU General Public License version
09: * 2 only, as published by the Free Software Foundation.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * General Public License version 2 for more details (a copy is
15: * included at /legal/license.txt).
16: *
17: * You should have received a copy of the GNU General Public License
18: * version 2 along with this work; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA
21: *
22: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
23: * Clara, CA 95054 or visit www.sun.com if you need additional
24: * information or have any questions.
25: *
26: */
27: package sun.io;
28:
29: /**
30: * A algorithmic conversion from ISO 8859-1 to Unicode
31: *
32: * @author Lloyd Honomichl
33: * @author Asmus Freytag
34: */
35: public class ByteToCharISO8859_1 extends ByteToCharConverter {
36:
37: // Return the character set id
38: public String getCharacterEncoding() {
39: return "ISO8859_1";
40: }
41:
42: public int flush(char[] output, int outStart, int outEnd) {
43: // This converter will not buffer any data.
44: byteOff = charOff = 0;
45: return 0;
46: }
47:
48: /**
49: * Algorithmic character conversion
50: */
51: public native int convert(byte[] input, int inOff, int inEnd,
52: char[] output, int outOff, int outEnd)
53: throws ConversionBufferFullException;
54:
55: /**
56: * This is the old Java version convert(). We changed it
57: * to a CNI method for performance purpose.
58: *
59: *public int convert(byte[] input, int inOff, int inEnd,
60: * char[] output, int outOff, int outEnd)
61: *
62: * throws ConversionBufferFullException
63: *{
64: * int bound = inOff + (outEnd - outOff);
65: * if (bound >= inEnd) {
66: * bound = inEnd;
67: * }
68: * int bytesWritten = inEnd - inOff;
69: *
70: *
71: * // Loop until we hit the end of the input
72: * try {
73: * while(inOff < bound) {
74: * output[outOff++] = (char) (0xff & input[inOff++]);
75: * }
76: * } finally {
77: * charOff = outOff;
78: * byteOff = inOff;
79: * }
80: *
81: * // If we don't have room for the output, throw an exception
82: * if (bound < inEnd)
83: * throw new ConversionBufferFullException();
84: *
85: * // Return the length written to the output buffer
86: * return bytesWritten;
87: *}
88: */
89:
90: /*
91: Reset after finding bad input
92: */
93: public void reset() {
94: byteOff = charOff = 0;
95: }
96:
97: }
|