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 }
|