Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java')
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java40
1 files changed, 32 insertions, 8 deletions
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java
index 8c2077fc5d..cfc5d9045d 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/io/ExtendedIOUtil.java
@@ -19,6 +19,14 @@ import java.io.IOException;
*/
public final class ExtendedIOUtil
{
+ private static final int UTF_HEADER_SIZE = 2;
+
+ private static final int MAX_16_BIT = (1 << 16) - 1;
+
+ private static final int MAX_UTF_LENGTH = MAX_16_BIT - UTF_HEADER_SIZE;
+
+ private static final int MAX_UTF_CHARS = MAX_UTF_LENGTH / 3;
+
private ExtendedIOUtil()
{
}
@@ -40,12 +48,20 @@ public final class ExtendedIOUtil
{
if (str != null)
{
- writeByteArray(out, str.getBytes());
- }
- else
- {
- out.writeInt(-1);
+ int size = str.length();
+ int start = 0;
+ do
+ {
+ out.writeBoolean(true);
+ int chunk = Math.min(size, MAX_UTF_CHARS);
+ int end = start + chunk;
+ out.writeUTF(str.substring(start, end));
+ start = end;
+ size -= chunk;
+ } while (size > 0);
}
+
+ out.writeBoolean(false);
}
public static byte[] readByteArray(DataInput in) throws IOException
@@ -72,12 +88,20 @@ public final class ExtendedIOUtil
public static String readString(DataInput in) throws IOException
{
- byte[] bytes = readByteArray(in);
- if (bytes == null)
+ boolean more = in.readBoolean();
+ if (!more)
{
return null;
}
- return new String(bytes);
+ StringBuilder builder = new StringBuilder();
+ do
+ {
+ String chunk = in.readUTF();
+ builder.append(chunk);
+ more = in.readBoolean();
+ } while (more);
+
+ return builder.toString();
}
}

Back to the top