Files
HRMS/hrmsEjb/jxl/biff/WritableRecordData.java
2025-07-28 13:56:49 +05:30

53 lines
1.6 KiB
Java

package jxl.biff;
import common.Logger;
import jxl.read.biff.Record;
public abstract class WritableRecordData extends RecordData implements ByteData {
private static Logger logger = Logger.getLogger(WritableRecordData.class);
protected static final int maxRecordLength = 8228;
protected WritableRecordData(Type t) {
super(t);
}
protected WritableRecordData(Record t) {
super(t);
}
public final byte[] getBytes() {
byte[] data = getData();
int dataLength = data.length;
if (data.length > 8224) {
dataLength = 8224;
data = handleContinueRecords(data);
}
byte[] bytes = new byte[data.length + 4];
System.arraycopy(data, 0, bytes, 4, data.length);
IntegerHelper.getTwoBytes(getCode(), bytes, 0);
IntegerHelper.getTwoBytes(dataLength, bytes, 2);
return bytes;
}
private byte[] handleContinueRecords(byte[] data) {
int continuedData = data.length - 8224;
int numContinueRecords = continuedData / 8224 + 1;
byte[] newdata = new byte[data.length + numContinueRecords * 4];
System.arraycopy(data, 0, newdata, 0, 8224);
int oldarraypos = 8224;
int newarraypos = 8224;
for (int i = 0; i < numContinueRecords; i++) {
int length = Math.min(data.length - oldarraypos, 8224);
IntegerHelper.getTwoBytes(Type.CONTINUE.value, newdata, newarraypos);
IntegerHelper.getTwoBytes(length, newdata, newarraypos + 2);
System.arraycopy(data, oldarraypos, newdata, newarraypos + 4, length);
oldarraypos += length;
newarraypos += length + 4;
}
return newdata;
}
protected abstract byte[] getData();
}