Converter byte em String

Boa tarde,

Eu tenho dois códigos a seguir:

Código 1:

import java.io.PrintStream;
import java.io.InputStream;
import java.io.IOException;

public class Entrada1{
	public static void main (String[] args) throws IOException{

		byte[] bt = new byte[50];
		String nome, email;

		System.out.print("\nInforme seu nome: ");
		System.in.read(bt);
		nome = new String(bt).trim();

		System.out.print("\nInforme seu email: ");
		System.in.read(bt);
		email = new String(bt).trim();

		System.out.println("\nDados recebidos:");
		System.out.printf("Nome:\t %s\nE-mail:\t %s\n\n",nome,email);
	}
}

Código 2:

import java.io.PrintStream;
import java.io.InputStream;
import java.io.IOException;

public class Entrada2{
	public static void main (String[] args) throws IOException{

		byte[] bt = new byte[50];
		String nome, email;

		System.out.print("\nInforme seu nome: ");
		System.in.read(bt);
		nome = bt.toString();
		
		System.out.print("\nInforme seu email: ");
		System.in.read(bt);
		email = bt.toString();
		
		System.out.println("\nDados recebidos:");
		System.out.printf("Nome:\t %s\nE-mail:\t %s\n\n",nome,email);
	}
}

Por que no código 2, o retorno das variáveis foram: [B@15db9742

Fiquei bolado. Eu queria converter de byte para String e não utilizar um construtor para tal. Existe tal possibilidade?

Obrigado.

O método toString é um método da classe java.lang.Object. Basicamente, o mesmo retorna o pacote da classe do objeto, o nome da classe + “@” e um hash referente ao objeto.
O que pode gerar saídas como estas: [B@15db9742
Por quê isso ocorreu?
Você disse que o valor de email é bt.toString();, o mesmo com nome. Se tivesse feito isso
email = new String(bt); teria, provavelmente, a informação correta.
Por quê? O método toString dos objetos vetor (lembre-se, todo vetor é um objeto, em java), segue o padrão da classe java.lang.Object.

Bacana. Foi o que eu fiz no código 1: email = new String(bt);

Então não seria possível converter esse vetor de bytes em uma string sem utilizar o construtor (new String…)?

Obrigado.

Você consegue, tanto que fez. Agora, a saída dele não será exatamente a que você espera.

1 curtida

Deve existir uma forma de decodificar. Bom, era somente uma curiosidade mesmo. Abraços.

A forma de “decodificar”, que na verdade seria dispor em um formato legível aos seres humanos é a que você fez no primeiro exemplo. Outra seria sobrescrever o método toString do objeto…

Não, objetos do tipo String são instanciados a partir de constantes literais ou a partir do construtor da classe String.
Você pode utilizar StringBuffer ou StringBuilder para obter uma String, mas nesse seu exemplo não vale a pena.