KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jbet > CpUtf8


1 /*
2  * JBET - Java Binary Enhancement Tool
3  * Copyright (c) 2003 Networks Associates Technology, Inc.
4  *
5  * This software was developed under DARPA/SPAWAR contract
6  * N66001-00-C-8602 "SPMA" as part of the
7  * DARPA OASIS research program.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */

30
31 /**
32  * Represent a utf8 record in the constant pool. Utf8 is a format
33  * that allows 16-bit characters to be represented, in most cases,
34  * using one byte per character. This is useful for representing
35  * large character sets compactly on disk. In JBET, we represent utf8
36  * character sequences as String objects while in memory, and then
37  * convert back to utf8 when we write out to disk.
38  *
39  * All character sequences stored in a class file are represented by
40  * utf8 records. For example, the constant string record of the
41  * constant pool does not directly store a string, but instead indexes
42  * a constant utf8 record. Although JBET sometimes caches an actual
43  * String value, the JBET in-memory implementation generally maintains
44  * this indirection, except using references to CpUtf8 objects instead
45  * of indexes into the constant pool.
46  *
47  * All utf8 values in a constant pool are unique.
48  *
49  * $Id: CpUtf8.java,v 1.4 2003/09/09 17:31:53 areisse Exp $
50  *
51  * @author Larry D'Anna
52  * @author Lee Badger
53  * @version 0.1
54  */

55 package jbet;
56 import java.io.*;
57
58 class CpUtf8 extends CpEntry {
59     String JavaDoc string;
60
61     CpUtf8(int i, CPInterface cp) {
62     super(i, CPInterface.CONSTANT_Utf8, cp);
63     }
64
65     CpUtf8(CPInterface cp, String JavaDoc s) {
66     super(cp.poolCount(), CPInterface.CONSTANT_Utf8, cp);
67     string = s;
68     }
69
70     public String JavaDoc toString() {
71     return "\"" + Util.quoteString(string) + "\"" ;
72     }
73
74     public int hashCode() {
75     return string.hashCode();
76     }
77
78     public boolean equals(Object JavaDoc o) {
79     return (o instanceof CpUtf8) && ((CpUtf8)o).string.equals(string);
80     }
81
82
83     void write(DataOutputStream dataOut) throws IOException {
84     dataOut.writeByte(tag);
85     dataOut.writeUTF(string);
86     }
87
88 }
89
90
91
92
Popular Tags