--- /dev/null
+package org.simantics.databoard.tests;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.DataInputStream;\r
+import java.io.DataOutputStream;\r
+import java.nio.charset.Charset;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.StringBinding;\r
+\r
+/**\r
+ *\r
+ * @author Toni Kalajainen <toni.kalajainen@iki.fi>\r
+ */\r
+public class StringUTFTest {\r
+ \r
+ public static void main(String[] args) throws Exception {\r
+ \r
+ StringBinding b = Bindings.STRING;\r
+ int c = 10000;\r
+ String[] strs = new String[c];\r
+ for (int i=0; i<c; i++) strs[i] = (String) b.createRandom(i);\r
+ \r
+ \r
+ {\r
+ ByteArrayOutputStream baos = new ByteArrayOutputStream( 10*1024*1024 );\r
+ DataOutputStream dos = new DataOutputStream( baos ); \r
+ System.gc();\r
+ long x = System.nanoTime();\r
+ for (int i=0; i<c; i++) {\r
+ dos.writeUTF(strs[i]);\r
+ }\r
+ long y = System.nanoTime() - x;\r
+ System.out.println("DataOutputStream.writeUTF: "+y);\r
+\r
+ byte[] data = baos.toByteArray();\r
+ DataInputStream dis = new DataInputStream( new ByteArrayInputStream( data ) );\r
+ x = System.nanoTime();\r
+ for (int i=0; i<c; i++) {\r
+ dis.readUTF();\r
+ }\r
+ y = System.nanoTime() - x;\r
+ System.out.println("DataOutputStream.readUTF : "+y);\r
+ }\r
+ \r
+ {\r
+ Charset cs = Charset.forName("UTF8");\r
+ ByteArrayOutputStream baos = new ByteArrayOutputStream( 10*1024*1024 );\r
+ DataOutputStream dos = new DataOutputStream( baos ); \r
+ System.gc();\r
+ long x = System.nanoTime();\r
+ for (int i=0; i<c; i++) {\r
+ byte[] data = strs[i].getBytes(cs);\r
+ dos.writeInt(data.length);\r
+ dos.write(data);\r
+ }\r
+ long y = System.nanoTime() - x;\r
+ System.out.println("String#getBytes(cs) : "+y);\r
+\r
+ \r
+ byte[] strData = new byte[1024];\r
+ byte[] data = baos.toByteArray();\r
+ DataInputStream dis = new DataInputStream( new ByteArrayInputStream( data ) );\r
+ x = System.nanoTime();\r
+ for (int i=0; i<c; i++) {\r
+ int len = dis.readInt();\r
+ dis.read(strData, 0, len);\r
+ new String(strData, cs);\r
+ }\r
+ y = System.nanoTime() - x;\r
+ System.out.println("new String(byte[], cs) : "+y);\r
+ }\r
+ \r
+ \r
+ }\r
+\r
+}\r