01 package net.sf.jbaobab.io.impl;
02 
03 import java.nio.ByteBuffer;
04 import java.nio.CharBuffer;
05 import java.nio.charset.CharacterCodingException;
06 import java.nio.charset.Charset;
07 import java.nio.charset.CharsetDecoder;
08 import java.nio.charset.CharsetEncoder;
09 
10 import net.sf.jbaobab.io.Translator;
11 
12 /**
13  <p>
14  * A {@link net.sf.jbaobab.io.Translator} that translates
15  {@link java.nio.ByteBuffer} to {@link java.lang.String}.
16  </p>
17  *
18  @author Oakyoon Cha
19  */
20 public class StringTranslator
21         implements Translator<String> {
22 
23     private Charset charset;
24     private CharsetDecoder decoder;
25     private CharsetEncoder encoder;
26 
27     public StringTranslator(Charset charset) {
28         this.charset = charset;
29         decoder = charset.newDecoder();
30         encoder = charset.newEncoder();
31     }
32 
33     public StringTranslator() {
34         this(Charset.defaultCharset());
35     }
36 
37     public Charset charset() {
38         return charset;
39     }
40 
41     public String translate(ByteBuffer buffer) {
42         try {
43             decoder.reset();
44             return decoder.decode(buffer).toString();
45         }
46         catch (CharacterCodingException e) {
47             decoder = charset.newDecoder();
48             return "";
49         }
50     }
51 
52     public ByteBuffer translate(String string) {
53         try {
54             encoder.reset();
55             return encoder.encode(CharBuffer.wrap(string));
56         }
57         catch (CharacterCodingException e) {
58             encoder = charset.newEncoder();
59             return ByteBuffer.allocate(0);
60         }
61     }
62 
63 }
Java2html