Obtendo a String!

1 resposta
Grinvon

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();
    }
    
}

1 Resposta

Grinvon

Pronto, tava faltando o flip() mesmo...

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());        
            
            //prepara o ByteBuffer
            
            b1.flip();
            
            CharBuffer saida = decoder.decode(b1); 
            String s = montarString(saida);
            
            System.out.println("String: " + s);
            
            //limpa a string
            b1.clear();
            b1.flip();
            saida = decoder.decode(b1);
            
            System.out.println("String clear: " + saida.toString());
            
        } 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();
    }
    
}
Criado 15 de abril de 2005
Ultima resposta 15 de abr. de 2005
Respostas 1
Participantes 1