]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/perf/ConverterPerformanceTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / perf / ConverterPerformanceTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2002-2008, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.test.perf;\r
8 \r
9 import java.io.ByteArrayInputStream;\r
10 import java.io.ByteArrayOutputStream;\r
11 import java.io.FileInputStream;\r
12 import java.io.InputStreamReader;\r
13 import java.io.OutputStreamWriter;\r
14 import java.nio.ByteBuffer;\r
15 import java.nio.CharBuffer;\r
16 import java.nio.charset.Charset;\r
17 import java.nio.charset.CharsetDecoder;\r
18 import java.nio.charset.CharsetEncoder;\r
19 import java.nio.charset.CodingErrorAction;\r
20 \r
21 import com.ibm.icu.charset.CharsetProviderICU;\r
22 \r
23 /**\r
24  * @author ram\r
25  */\r
26 public class ConverterPerformanceTest extends PerfTest {\r
27    public static void main(String[] args) throws Exception {\r
28        new ConverterPerformanceTest().run(args);\r
29    }\r
30    char[] unicodeBuffer = null;\r
31    byte[] encBuffer = null;\r
32 \r
33    protected void setup(String[] args) {\r
34         try{\r
35             // read in the input file, being careful with a possible BOM\r
36             FileInputStream in = new FileInputStream(fileName);\r
37             BOMFreeReader reader = new BOMFreeReader(in, encoding);\r
38             unicodeBuffer = readToEOS(reader);\r
39             \r
40             // use java.nio to convert unicodeBuffer from char[] to byte[] \r
41             CharBuffer source = CharBuffer.wrap(unicodeBuffer, 0, unicodeBuffer.length);\r
42             CharsetEncoder encoder = Charset.forName(encoding).newEncoder();\r
43             encoder.onMalformedInput(CodingErrorAction.REPORT);\r
44             encoder.onUnmappableCharacter(CodingErrorAction.REPORT);\r
45             ByteBuffer target = encoder.encode(source);\r
46             \r
47             // target.array() will probably return what we want, but lets take no chances\r
48             encBuffer = new byte[target.limit()];\r
49             for (int i=0; i<encBuffer.length; i++)\r
50                 encBuffer[i] = target.get(i);\r
51             \r
52         } catch(Exception ex){\r
53             ex.printStackTrace();\r
54             throw new RuntimeException(ex.getMessage());\r
55         }\r
56 \r
57         // we created some heavy objects, so lets try to clean up a little before running the tests\r
58         gc();\r
59    }\r
60 \r
61    PerfTest.Function TestFromUnicodeStream() {\r
62         return new PerfTest.Function() {\r
63             public void call() {\r
64                 try{\r
65                     ByteArrayOutputStream out = new ByteArrayOutputStream(unicodeBuffer.length * 10);\r
66                     OutputStreamWriter writer = new OutputStreamWriter(out, testName);\r
67                     writer.write(unicodeBuffer, 0, unicodeBuffer.length);\r
68                     writer.flush();\r
69                 }catch(Exception e){\r
70                     e.printStackTrace();\r
71                     throw new RuntimeException(e.getMessage());\r
72                 }\r
73             }\r
74             public long getOperationsPerIteration() {\r
75                 return unicodeBuffer.length;\r
76             }\r
77         };\r
78     }\r
79     PerfTest.Function TestToUnicodeStream() {\r
80         return new PerfTest.Function() {\r
81             char[] dst = new char[encBuffer.length];\r
82             public void call() {\r
83                 try{\r
84                     ByteArrayInputStream is = new ByteArrayInputStream(encBuffer, 0, encBuffer.length);\r
85                     InputStreamReader reader = new InputStreamReader(is, testName);\r
86                     reader.read(dst, 0, dst.length);\r
87                     reader.close();\r
88                 }catch(Exception e){\r
89                     e.printStackTrace();\r
90                     throw new RuntimeException(e.getMessage());\r
91                 }\r
92             }\r
93             public long getOperationsPerIteration() {\r
94                 return encBuffer.length;\r
95             }\r
96         };\r
97     }\r
98 /*\r
99     PerfTest.Function TestByteToCharConverter() { // decoder  charset.forname().newencoder().decode\r
100         try{\r
101             return new PerfTest.Function() {\r
102                 char[] dst = new char[encBuffer.length];\r
103                 int numOut =0;\r
104                 ByteToCharConverter conv = ByteToCharConverter.getConverter(testEncoderName);\r
105                 int num =0;\r
106                 public void call() {\r
107                     try{\r
108                         numOut= conv.convert(encBuffer, 0, encBuffer.length, dst, 0,dst.length);\r
109                         conv.reset();\r
110                     }catch(Exception e){\r
111                         e.printStackTrace();\r
112                         throw new RuntimeException(e.getMessage());\r
113                     }\r
114                 }\r
115                 public long getOperationsPerIteration() {\r
116                     return encBuffer.length;\r
117                 }\r
118             };\r
119         }catch(Exception e){\r
120             e.printStackTrace();\r
121             throw new RuntimeException(e.getMessage());\r
122         }\r
123     }\r
124 \r
125     PerfTest.Function TestCharToByteConverter() { // encoder charset.forname().newencoder().encode\r
126         try{\r
127             return new PerfTest.Function() {\r
128                 byte[] dst = new byte[encBuffer.length];\r
129                 int numOut =0;\r
130                 CharToByteConverter conv = CharToByteConverter.getConverter(testEncoderName);\r
131                 int num =0;\r
132                 public void call() {\r
133                     try{\r
134                         numOut= conv.convert(unicodeBuffer, 0,unicodeBuffer.length,dst,0, dst.length);\r
135                         conv.reset();\r
136                     }catch(Exception e){\r
137                         e.printStackTrace();\r
138                         throw new RuntimeException(e.getMessage());\r
139                     }\r
140                 }\r
141                 public long getOperationsPerIteration() {\r
142                     return unicodeBuffer.length;\r
143                 }\r
144             };\r
145         }catch(Exception e){\r
146             e.printStackTrace();\r
147             throw new RuntimeException(e.getMessage());\r
148         }\r
149     }\r
150 \r
151     PerfTest.Function TestByteToCharConverterICU() { // decoder  charsetprovidericu.getdecoder\r
152         try{\r
153             return new PerfTest.Function() {\r
154                 char[] dst = new char[encBuffer.length];\r
155                 int numOut =0;\r
156                 ByteToCharConverter conv = ByteToCharConverterICU.createConverter(testEncoderName);\r
157                 int num =0;\r
158                 public void call() {\r
159                     try{\r
160                         numOut= conv.convert(encBuffer, 0, encBuffer.length, dst, 0,dst.length);\r
161                         conv.reset();\r
162                     }catch(Exception e){\r
163                         e.printStackTrace();\r
164                         throw new RuntimeException(e.getMessage());\r
165                     }\r
166                 }\r
167                 public long getOperationsPerIteration() {\r
168                     return encBuffer.length;\r
169                 }\r
170             };\r
171         }catch(Exception e){\r
172             e.printStackTrace();\r
173             throw new RuntimeException(e.getMessage());\r
174         }\r
175     }\r
176 \r
177     PerfTest.Function TestCharToByteConverterICU() {\r
178         try{\r
179             return new PerfTest.Function() {\r
180                 byte[] dst = new byte[encBuffer.length*2];\r
181                 int numOut =0;\r
182                 CharToByteConverter conv = CharToByteConverterICU.createConverter(testEncoderName);\r
183                 int num =0;\r
184                 public void call() {\r
185                     try{\r
186                         numOut= conv.convert(unicodeBuffer, 0,unicodeBuffer.length,dst,0, dst.length);\r
187                         conv.reset();\r
188                     }catch(Exception e){\r
189                         e.printStackTrace();\r
190                         throw new RuntimeException(e.getMessage());\r
191                     }\r
192                 }\r
193                 public long getOperationsPerIteration() {\r
194                     return unicodeBuffer.length;\r
195                 }\r
196             };\r
197         }catch(Exception e){\r
198             e.printStackTrace();\r
199             throw new RuntimeException(e.getMessage());\r
200         }\r
201     }\r
202 */\r
203     PerfTest.Function TestCharsetDecoder() {\r
204         try{\r
205             return new PerfTest.Function() {\r
206                 CharBuffer outBuf = CharBuffer.allocate(unicodeBuffer.length);\r
207                 Charset myCharset = Charset.forName(testName);\r
208                 ByteBuffer srcBuf = ByteBuffer.wrap(encBuffer,0,encBuffer.length);\r
209                 CharsetDecoder decoder = myCharset.newDecoder();\r
210 \r
211                 public void call() {\r
212                     try{\r
213                         decoder.decode(srcBuf,outBuf,false);\r
214                         decoder.reset();\r
215                         srcBuf.rewind();\r
216                         outBuf.rewind();\r
217                     }catch(Exception e){\r
218                         e.printStackTrace();\r
219                         throw new RuntimeException(e.getMessage());\r
220                     }\r
221                 }\r
222                 public long getOperationsPerIteration() {\r
223                     return encBuffer.length;\r
224                 }\r
225             };\r
226         }catch(Exception e){\r
227             e.printStackTrace();\r
228             throw new RuntimeException(e.getMessage());\r
229         }\r
230     }\r
231 \r
232     PerfTest.Function TestCharsetEncoder() {\r
233         try{\r
234             return new PerfTest.Function() {\r
235                 ByteBuffer outBuf = ByteBuffer.allocate(encBuffer.length);\r
236                 Charset myCharset = Charset.forName(testName);\r
237                 CharBuffer srcBuf = CharBuffer.wrap(unicodeBuffer,0,unicodeBuffer.length);\r
238                 CharsetEncoder encoder = myCharset.newEncoder();\r
239 \r
240                 public void call() {\r
241                     try{\r
242                         encoder.encode(srcBuf,outBuf,false);\r
243                         encoder.reset();\r
244                         srcBuf.rewind();\r
245                         outBuf.rewind();\r
246                     }catch(Exception e){\r
247                         e.printStackTrace();\r
248                         throw new RuntimeException(e.getMessage());\r
249                     }\r
250                 }\r
251                 public long getOperationsPerIteration() {\r
252                     return unicodeBuffer.length;\r
253                 }\r
254             };\r
255         }catch(Exception e){\r
256             e.printStackTrace();\r
257             throw new RuntimeException(e.getMessage());\r
258         }\r
259     }\r
260 \r
261     PerfTest.Function TestCharsetDecoderICU() {\r
262         try{\r
263             return new PerfTest.Function() {\r
264                 CharBuffer outBuf = CharBuffer.allocate(unicodeBuffer.length);\r
265                 Charset myCharset = new CharsetProviderICU().charsetForName(testName);\r
266                 ByteBuffer srcBuf = ByteBuffer.wrap(encBuffer,0,encBuffer.length);\r
267                 CharsetDecoder decoder = myCharset.newDecoder();\r
268 \r
269                 public void call() {\r
270                     try{\r
271                         decoder.decode(srcBuf,outBuf,false);\r
272                         decoder.reset();\r
273                         srcBuf.rewind();\r
274                         outBuf.rewind();\r
275                     }catch(Exception e){\r
276                         e.printStackTrace();\r
277                         throw new RuntimeException(e.getMessage());\r
278                     }\r
279                 }\r
280                 public long getOperationsPerIteration() {\r
281                     return encBuffer.length;\r
282                 }\r
283             };\r
284         }catch(Exception e){\r
285             e.printStackTrace();\r
286             throw new RuntimeException(e.getMessage());\r
287         }\r
288     }\r
289 \r
290     PerfTest.Function TestCharsetEncoderICU() {\r
291         try{\r
292             return new PerfTest.Function() {\r
293                 ByteBuffer outBuf = ByteBuffer.allocate(encBuffer.length);\r
294                 Charset myCharset = new CharsetProviderICU().charsetForName(testName);\r
295                 CharBuffer srcBuf = CharBuffer.wrap(unicodeBuffer,0,unicodeBuffer.length);\r
296                 CharsetEncoder encoder = myCharset.newEncoder();\r
297 \r
298                 public void call() {\r
299                     try{\r
300                         encoder.encode(srcBuf,outBuf,false);\r
301                         encoder.reset();\r
302                         srcBuf.rewind();\r
303                         outBuf.rewind();\r
304                     }catch(Exception e){\r
305                         e.printStackTrace();\r
306                         throw new RuntimeException(e.getMessage());\r
307                     }\r
308                 }\r
309                 public long getOperationsPerIteration() {\r
310                     return unicodeBuffer.length;\r
311                 }\r
312             };\r
313         }catch(Exception e){\r
314             e.printStackTrace();\r
315             throw new RuntimeException(e.getMessage());\r
316         }\r
317     }\r
318 }\r