From f9e5657a83074c920fff302ffaa2d633243d6b52 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Thu, 20 Apr 2023 02:10:53 +0200 Subject: [PATCH] Fix strings --- .../it/cavallium/buffer/BufDataInput.java | 20 --------- .../nativedata/StringSerializer.java | 41 +------------------ .../it/cavallium/stream/SafeDataInput.java | 17 ++++++-- .../cavallium/stream/SafeDataInputStream.java | 34 --------------- .../stream/SafeFilterInputStream.java | 2 +- 5 files changed, 17 insertions(+), 97 deletions(-) diff --git a/data-generator-runtime/src/main/java/it/cavallium/buffer/BufDataInput.java b/data-generator-runtime/src/main/java/it/cavallium/buffer/BufDataInput.java index 8b8ab21..83fade9 100644 --- a/data-generator-runtime/src/main/java/it/cavallium/buffer/BufDataInput.java +++ b/data-generator-runtime/src/main/java/it/cavallium/buffer/BufDataInput.java @@ -2,8 +2,6 @@ package it.cavallium.buffer; import it.cavallium.stream.SafeByteArrayInputStream; import it.cavallium.stream.SafeDataInputStream; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import org.jetbrains.annotations.NotNull; @@ -42,22 +40,4 @@ public class BufDataInput extends SafeDataInputStream { public boolean markSupported() { return false; } - - @Deprecated - @Override - public @NotNull String readUTF() { - return readShortText(StandardCharsets.UTF_8); - } - - @Override - public @NotNull String readShortText(Charset charset) { - var length = this.readUnsignedShort(); - return this.readString(length, charset); - } - - @Override - public @NotNull String readMediumText(Charset charset) { - var length = this.readInt(); - return this.readString(length, charset); - } } diff --git a/data-generator-runtime/src/main/java/it/cavallium/data/generator/nativedata/StringSerializer.java b/data-generator-runtime/src/main/java/it/cavallium/data/generator/nativedata/StringSerializer.java index 9ba6a70..272b7f0 100644 --- a/data-generator-runtime/src/main/java/it/cavallium/data/generator/nativedata/StringSerializer.java +++ b/data-generator-runtime/src/main/java/it/cavallium/data/generator/nativedata/StringSerializer.java @@ -3,58 +3,21 @@ package it.cavallium.data.generator.nativedata; import it.cavallium.data.generator.DataSerializer; import it.cavallium.stream.SafeDataInput; import it.cavallium.stream.SafeDataOutput; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.CharacterCodingException; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CodingErrorAction; import java.nio.charset.StandardCharsets; import org.jetbrains.annotations.NotNull; public class StringSerializer implements DataSerializer { public static final StringSerializer INSTANCE = new StringSerializer(); - private static final ThreadLocal UTF8_ENCODER = ThreadLocal.withInitial(() -> StandardCharsets.UTF_8 - .newEncoder() - .onUnmappableCharacter(CodingErrorAction.REPORT) - .onMalformedInput(CodingErrorAction.REPORT) - ); - private static final ThreadLocal UTF8_DECODER = ThreadLocal.withInitial(() -> StandardCharsets.UTF_8 - .newDecoder() - .onUnmappableCharacter(CodingErrorAction.REPORT) - .onMalformedInput(CodingErrorAction.REPORT) - ); @Override public void serialize(SafeDataOutput dataOutput, @NotNull String data) { - try { - var bytes = UTF8_ENCODER.get().reset().encode(CharBuffer.wrap(data)); - - dataOutput.writeInt(bytes.limit()); - if (bytes.hasArray()) { - dataOutput.write(bytes.array(), bytes.arrayOffset(), bytes.limit()); - } else { - while (bytes.hasRemaining()) { - dataOutput.writeByte(bytes.get()); - } - } - } catch (CharacterCodingException ex) { - throw new IllegalStateException("Can't encode this UTF-8 string", ex); - } + dataOutput.writeMediumText(data, StandardCharsets.UTF_8); } @NotNull @Override public String deserialize(SafeDataInput dataInput) { - byte[] bytes = new byte[dataInput.readInt()]; - dataInput.readFully(bytes); - try { - CharBuffer decoded = UTF8_DECODER.get().reset().decode(ByteBuffer.wrap(bytes)); - return decoded.toString(); - } catch (IllegalStateException | CharacterCodingException ex) { - throw new IllegalStateException("Can't decode this UTF-8 string", ex); - } + return dataInput.readMediumText(StandardCharsets.UTF_8); } } diff --git a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInput.java b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInput.java index 44c1aa7..37f6e3f 100644 --- a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInput.java +++ b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInput.java @@ -4,6 +4,7 @@ import java.io.Closeable; import java.io.DataInput; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.jetbrains.annotations.NotNull; /** @@ -145,9 +146,19 @@ public interface SafeDataInput extends Closeable, DataInput { String readLine(); @Deprecated - @NotNull String readUTF(); + default @NotNull String readUTF() { + return readShortText(StandardCharsets.UTF_8); + } - @NotNull String readShortText(Charset charset); + default @NotNull String readShortText(Charset charset) { + var length = this.readUnsignedShort(); + return this.readString(length, charset); + } - @NotNull String readMediumText(Charset charset); + default @NotNull String readMediumText(Charset charset) { + var length = this.readInt(); + return this.readString(length, charset); + } + + @NotNull String readString(int len, Charset charset); } diff --git a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInputStream.java b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInputStream.java index ed955bf..7b4435a 100644 --- a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInputStream.java +++ b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeDataInputStream.java @@ -25,9 +25,6 @@ package it.cavallium.stream; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - import it.cavallium.buffer.IgnoreCoverage; import org.jetbrains.annotations.NotNull; @@ -342,35 +339,4 @@ public class SafeDataInputStream extends SafeFilterInputStream implements SafeDa public final String readLine() { throw new UnsupportedOperationException(); } - - /** - * See the general contract of the {@code readUTF} - * method of {@code DataInput}. - *

- * Bytes - * for this operation are read from the contained - * input stream. - * - * @return a Unicode string. - */ - @Deprecated - @IgnoreCoverage - @Override - public @NotNull String readUTF() { - return readShortText(StandardCharsets.UTF_8); - } - - @IgnoreCoverage - @Override - public @NotNull String readShortText(Charset charset) { - int utfLength = this.readUnsignedShort(); - return in.readString(utfLength, charset); - } - - @IgnoreCoverage - @Override - public @NotNull String readMediumText(Charset charset) { - int utfLength = this.readInt(); - return in.readString(utfLength, charset); - } } diff --git a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeFilterInputStream.java b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeFilterInputStream.java index c2cee74..6bcb1ca 100644 --- a/data-generator-runtime/src/main/java/it/cavallium/stream/SafeFilterInputStream.java +++ b/data-generator-runtime/src/main/java/it/cavallium/stream/SafeFilterInputStream.java @@ -224,7 +224,7 @@ public class SafeFilterInputStream extends SafeInputStream { @IgnoreCoverage @Override - public String readString(int length, Charset charset) { + public @NotNull String readString(int length, Charset charset) { return in.readString(length, charset); } }