Removed String methods from LittleEndianInput
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@707541 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
21a68aae0e
commit
a09b170ad4
@ -26,7 +26,6 @@ import org.apache.poi.hssf.record.formula.Ref3DPtg;
|
|||||||
import org.apache.poi.hssf.record.formula.RefPtg;
|
import org.apache.poi.hssf.record.formula.RefPtg;
|
||||||
import org.apache.poi.util.HexDump;
|
import org.apache.poi.util.HexDump;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
|
|
||||||
import org.apache.poi.util.LittleEndianInput;
|
import org.apache.poi.util.LittleEndianInput;
|
||||||
import org.apache.poi.util.LittleEndianInputStream;
|
import org.apache.poi.util.LittleEndianInputStream;
|
||||||
import org.apache.poi.util.LittleEndianOutput;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
@ -113,10 +112,10 @@ public final class EmbeddedObjectRefSubRecord extends SubRecord {
|
|||||||
field_3_unicode_flag = ( in.readByte() & 0x01 ) != 0;
|
field_3_unicode_flag = ( in.readByte() & 0x01 ) != 0;
|
||||||
remaining -= LittleEndian.BYTE_SIZE;
|
remaining -= LittleEndian.BYTE_SIZE;
|
||||||
if (field_3_unicode_flag) {
|
if (field_3_unicode_flag) {
|
||||||
field_4_ole_classname = in.readUnicodeLEString(nChars);
|
field_4_ole_classname = StringUtil.readUnicodeLE(in, nChars);
|
||||||
stringByteCount = nChars * 2;
|
stringByteCount = nChars * 2;
|
||||||
} else {
|
} else {
|
||||||
field_4_ole_classname = in.readCompressedUnicode(nChars);
|
field_4_ole_classname = StringUtil.readCompressedUnicode(in, nChars);
|
||||||
stringByteCount = nChars;
|
stringByteCount = nChars;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.util.BitField;
|
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
|
||||||
import org.apache.poi.util.LittleEndianInput;
|
import org.apache.poi.util.LittleEndianInput;
|
||||||
import org.apache.poi.util.LittleEndianOutput;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
import org.apache.poi.util.StringUtil;
|
import org.apache.poi.util.StringUtil;
|
||||||
@ -32,28 +30,25 @@ import org.apache.poi.util.StringUtil;
|
|||||||
* @author Bernard Chesnoy
|
* @author Bernard Chesnoy
|
||||||
*/
|
*/
|
||||||
public final class StringPtg extends ScalarConstantPtg {
|
public final class StringPtg extends ScalarConstantPtg {
|
||||||
public final static int SIZE = 9;
|
|
||||||
public final static byte sid = 0x17;
|
public final static byte sid = 0x17;
|
||||||
private static final BitField fHighByte = BitFieldFactory.getInstance(0x01);
|
|
||||||
/** the character (") used in formulas to delimit string literals */
|
/** the character (") used in formulas to delimit string literals */
|
||||||
private static final char FORMULA_DELIMITER = '"';
|
private static final char FORMULA_DELIMITER = '"';
|
||||||
|
|
||||||
|
private final boolean _is16bitUnicode;
|
||||||
/**
|
/**
|
||||||
* NOTE: OO doc says 16bit length, but BiffViewer says 8 Book says something
|
* NOTE: OO doc says 16bit length, but BiffViewer says 8 Book says something
|
||||||
* totally different, so don't look there!
|
* totally different, so don't look there!
|
||||||
*/
|
*/
|
||||||
private final int field_1_length;
|
|
||||||
private final byte field_2_options;
|
|
||||||
private final String field_3_string;
|
private final String field_3_string;
|
||||||
|
|
||||||
/** Create a StringPtg from a stream */
|
/** Create a StringPtg from a stream */
|
||||||
public StringPtg(LittleEndianInput in) {
|
public StringPtg(LittleEndianInput in) {
|
||||||
field_1_length = in.readUByte();
|
int nChars = in.readUByte(); // Note - nChars is 8-bit
|
||||||
field_2_options = in.readByte();
|
_is16bitUnicode = (in.readByte() & 0x01) != 0;
|
||||||
if (fHighByte.isSet(field_2_options)) {
|
if (_is16bitUnicode) {
|
||||||
field_3_string = in.readUnicodeLEString(field_1_length);
|
field_3_string = StringUtil.readUnicodeLE(in, nChars);
|
||||||
} else {
|
} else {
|
||||||
field_3_string = in.readCompressedUnicode(field_1_length);
|
field_3_string = StringUtil.readCompressedUnicode(in, nChars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,9 +65,8 @@ public final class StringPtg extends ScalarConstantPtg {
|
|||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"String literals in formulas can't be bigger than 255 characters ASCII");
|
"String literals in formulas can't be bigger than 255 characters ASCII");
|
||||||
}
|
}
|
||||||
field_2_options = (byte) fHighByte.setBoolean(0, StringUtil.hasMultibyte(value));
|
_is16bitUnicode = StringUtil.hasMultibyte(value);
|
||||||
field_3_string = value;
|
field_3_string = value;
|
||||||
field_1_length = value.length(); // for the moment, we support only ASCII strings in formulas we create
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
@ -81,21 +75,17 @@ public final class StringPtg extends ScalarConstantPtg {
|
|||||||
|
|
||||||
public void write(LittleEndianOutput out) {
|
public void write(LittleEndianOutput out) {
|
||||||
out.writeByte(sid + getPtgClass());
|
out.writeByte(sid + getPtgClass());
|
||||||
out.writeByte(field_1_length);
|
out.writeByte(field_3_string.length()); // Note - nChars is 8-bit
|
||||||
out.writeByte(field_2_options);
|
out.writeByte(_is16bitUnicode ? 0x01 : 0x00);
|
||||||
if (fHighByte.isSet(field_2_options)) {
|
if (_is16bitUnicode) {
|
||||||
StringUtil.putUnicodeLE(getValue(), out);
|
StringUtil.putUnicodeLE(field_3_string, out);
|
||||||
} else {
|
} else {
|
||||||
StringUtil.putCompressedUnicode(getValue(), out);
|
StringUtil.putCompressedUnicode(field_3_string, out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
if (fHighByte.isSet(field_2_options)) {
|
return 3 + field_3_string.length() * (_is16bitUnicode ? 2 : 1);
|
||||||
return 2 * field_1_length + 3;
|
|
||||||
} else {
|
|
||||||
return field_1_length + 3;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toFormulaString() {
|
public String toFormulaString() {
|
||||||
|
@ -114,20 +114,4 @@ public final class LittleEndianByteArrayInputStream implements LittleEndianInput
|
|||||||
public double readDouble() {
|
public double readDouble() {
|
||||||
return Double.longBitsToDouble(readLong());
|
return Double.longBitsToDouble(readLong());
|
||||||
}
|
}
|
||||||
public String readCompressedUnicode(int nChars) {
|
|
||||||
checkPosition(nChars);
|
|
||||||
char[] buf = new char[nChars];
|
|
||||||
for (int i = 0; i < buf.length; i++) {
|
|
||||||
buf[i] = (char) readUByte();
|
|
||||||
}
|
|
||||||
return new String(buf);
|
|
||||||
}
|
|
||||||
public String readUnicodeLEString(int nChars) {
|
|
||||||
checkPosition(nChars*2);
|
|
||||||
char[] buf = new char[nChars];
|
|
||||||
for (int i = 0; i < buf.length; i++) {
|
|
||||||
buf[i] = (char) readUShort();
|
|
||||||
}
|
|
||||||
return new String(buf);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,4 @@ public interface LittleEndianInput {
|
|||||||
double readDouble();
|
double readDouble();
|
||||||
void readFully(byte[] buf);
|
void readFully(byte[] buf);
|
||||||
void readFully(byte[] buf, int off, int len);
|
void readFully(byte[] buf, int off, int len);
|
||||||
String readUnicodeLEString(int nChars);
|
|
||||||
String readCompressedUnicode(int nChars);
|
|
||||||
}
|
}
|
||||||
|
@ -131,34 +131,4 @@ public class LittleEndianInputStream extends FilterInputStream implements Little
|
|||||||
buf[i] = (byte) ch;
|
buf[i] = (byte) ch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public String readCompressedUnicode(int nChars) {
|
|
||||||
char[] buf = new char[nChars];
|
|
||||||
for (int i = 0; i < buf.length; i++) {
|
|
||||||
int ch;
|
|
||||||
try {
|
|
||||||
ch = in.read();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
checkEOF(ch);
|
|
||||||
buf[i] = (char) ch;
|
|
||||||
|
|
||||||
}
|
|
||||||
return new String(buf);
|
|
||||||
}
|
|
||||||
public String readUnicodeLEString(int nChars) {
|
|
||||||
char[] buf = new char[nChars];
|
|
||||||
for (int i = 0; i < buf.length; i++) {
|
|
||||||
int ch;
|
|
||||||
try {
|
|
||||||
ch = in.read();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
checkEOF(ch);
|
|
||||||
buf[i] = (char) ch;
|
|
||||||
|
|
||||||
}
|
|
||||||
return new String(buf);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user