Bugfixes
This commit is contained in:
parent
a06ddc7d0a
commit
70adaaf6cf
@ -19,13 +19,13 @@ public class BufDataOutput implements SafeDataOutput {
|
|||||||
private final SafeDataOutputStream dOut;
|
private final SafeDataOutputStream dOut;
|
||||||
private final int limit;
|
private final int limit;
|
||||||
|
|
||||||
private BufDataOutput(SafeByteArrayOutputStream buf) {
|
public BufDataOutput(SafeByteArrayOutputStream buf) {
|
||||||
this.buf = buf;
|
this.buf = buf;
|
||||||
this.dOut = new SafeDataOutputStream(buf);
|
this.dOut = new SafeDataOutputStream(buf);
|
||||||
limit = Integer.MAX_VALUE;
|
limit = Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BufDataOutput(SafeByteArrayOutputStream buf, int maxSize) {
|
public BufDataOutput(SafeByteArrayOutputStream buf, int maxSize) {
|
||||||
this.buf = buf;
|
this.buf = buf;
|
||||||
this.dOut = new SafeDataOutputStream(buf);
|
this.dOut = new SafeDataOutputStream(buf);
|
||||||
this.limit = maxSize;
|
this.limit = maxSize;
|
||||||
@ -219,13 +219,12 @@ public class BufDataOutput implements SafeDataOutput {
|
|||||||
public void writeShortText(String s, Charset charset) {
|
public void writeShortText(String s, Charset charset) {
|
||||||
if (charset == StandardCharsets.UTF_8) {
|
if (charset == StandardCharsets.UTF_8) {
|
||||||
var beforeWrite = this.buf.position();
|
var beforeWrite = this.buf.position();
|
||||||
this.buf.position(beforeWrite + Short.BYTES);
|
writeShort(0);
|
||||||
ZeroAllocationEncoder.INSTANCE.encodeTo(s, this);
|
ZeroAllocationEncoder.INSTANCE.encodeTo(s, this);
|
||||||
var afterWrite = this.buf.position();
|
var afterWrite = this.buf.position();
|
||||||
this.buf.position(beforeWrite);
|
this.buf.position(beforeWrite);
|
||||||
var len = Math.toIntExact(afterWrite - beforeWrite - Short.BYTES);
|
var len = Math.toIntExact(afterWrite - beforeWrite - Short.BYTES);
|
||||||
if (len > Short.MAX_VALUE) {
|
if (len > Short.MAX_VALUE) {
|
||||||
this.buf.position(beforeWrite);
|
|
||||||
throw new IndexOutOfBoundsException("String too long: " + len + " bytes");
|
throw new IndexOutOfBoundsException("String too long: " + len + " bytes");
|
||||||
}
|
}
|
||||||
this.writeShort(len);
|
this.writeShort(len);
|
||||||
@ -245,7 +244,7 @@ public class BufDataOutput implements SafeDataOutput {
|
|||||||
public void writeMediumText(String s, Charset charset) {
|
public void writeMediumText(String s, Charset charset) {
|
||||||
if (charset == StandardCharsets.UTF_8) {
|
if (charset == StandardCharsets.UTF_8) {
|
||||||
var beforeWrite = this.buf.position();
|
var beforeWrite = this.buf.position();
|
||||||
this.buf.position(beforeWrite + Integer.BYTES);
|
writeInt(0);
|
||||||
ZeroAllocationEncoder.INSTANCE.encodeTo(s, this);
|
ZeroAllocationEncoder.INSTANCE.encodeTo(s, this);
|
||||||
var afterWrite = this.buf.position();
|
var afterWrite = this.buf.position();
|
||||||
this.buf.position(beforeWrite);
|
this.buf.position(beforeWrite);
|
||||||
|
@ -71,11 +71,24 @@ class ZeroAllocationEncoderTest {
|
|||||||
testDecodeString("lorem ipsum dolor sit amet my name is giovanni");
|
testDecodeString("lorem ipsum dolor sit amet my name is giovanni");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void encodeToLong() {
|
||||||
|
testEncodeString("lorem ipsum dolor sit amet ".repeat(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void decodeLong() {
|
||||||
|
testDecodeString("lorem ipsum dolor sit amet".repeat(10));
|
||||||
|
}
|
||||||
|
|
||||||
public void testEncodeString(String s) {
|
public void testEncodeString(String s) {
|
||||||
var bdo = BufDataOutput.create();
|
var bdo = BufDataOutput.create();
|
||||||
INSTANCE.encodeTo(s, bdo);
|
INSTANCE.encodeTo(s, bdo);
|
||||||
var out = bdo.toList().toString(StandardCharsets.UTF_8);
|
var out = bdo.toList();
|
||||||
Assertions.assertEquals(s, out);
|
out.toString(StandardCharsets.UTF_8);
|
||||||
|
Assertions.assertEquals(s, out.toString(StandardCharsets.UTF_8));
|
||||||
|
Assertions.assertEquals(s.length(), bdo.size());
|
||||||
|
Assertions.assertEquals(s.length(), out.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testDecodeString(String s) {
|
private void testDecodeString(String s) {
|
||||||
|
Loading…
Reference in New Issue
Block a user