Galera, tava eu tantando obeter a minha própria String que usei no ByteBuffer, mas retorno uma String estranha. Talvez por que o position() esteja marcando para uma área não usada. Vou tentar da um flip() para vê se retorna uma string, mas acho que não irá funcionar, alguém tem uma luz?
package com.nio.buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class Exemplo01
{
String entrada = "Liberdade";
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();
public Exemplo01()
{
try
{
ByteBuffer bb = null;
bb = encoder.encode(CharBuffer.wrap(entrada));
System.out.println("Capacidade: " + bb.capacity());
System.out.println("Limite: " + bb.limit());
System.out.println("Posição: " + bb.position());
ByteBuffer b1 = ByteBuffer.allocate(20);
b1.put((byte) 'f').put((byte) 'e').put((byte) 's').put((byte) 't').put((byte) 'a'); //festa
System.out.println("*************\nCapacidade: " + b1.capacity());
System.out.println("Limite: " + b1.limit());
System.out.println("Posição: " + b1.position());
CharBuffer saida = decoder.decode(b1);
String s = montarString(saida);
System.out.println("String: " + s);
} catch (CharacterCodingException ex)
{
ex.printStackTrace();
}
}
public String montarString(CharBuffer cb)
{
String sRetorno = "";
if (cb.hasArray())
{
int limite = cb.length();
for (int i=0; i < limite; i++)
{
sRetorno += String.valueOf(cb.charAt(i));
}
}
return sRetorno;
}
public static void main(String[] args)
{
new Exemplo01();
}
}