251 votes

byte[] String (Java)

Supposons que j'ai simplement utilisé un BufferedInputStream de lire les octets d'un texte UTF-8 fichier dans un tableau d'octets. Je sais que je peux utiliser la routine suivante pour convertir les octets d'une chaîne de caractères, mais est-il plus efficace/plus intelligente façon de faire ce que juste une itération à travers les octets et la conversion de chacun?

public String openFileToString(byte[] _bytes)
{
    String file_string = "";

    for(int i = 0; i < _bytes.length; i++)
    {
        file_string += (char)_bytes[i];
    }

    return file_string;    
}

511voto

Jason Nichols Points 5055

Regarder le constructeur de la Chaîne

String str = new String(bytes, "UTF-8");

Et si vous êtes paresseux, vous pouvez utiliser l' Apache Commons IO bibliothèque de convertir l'InputStream à une Chaîne directement:

String str = IOUtils.toString(inputStream, "UTF-8");

41voto

Kashif Khan Points 1829

Java de la classe String a construit dans le constructeur pour la conversion de tableau d'octets de la chaîne.

byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46};

String value = new String(byteArray, "UTF-8");

11voto

Ted Hopp Points 122617

Pour convertir des données utf-8, vous ne pouvez pas assumer 1-1 de la correspondance entre les octets et les personnages. Essayez ceci:

String file_string = new String(bytes, "UTF-8");

(Bah. Je vois que je suis à la façon de ralentir frapper le Poteau Votre bouton Réponse.)

Pour lire l'intégralité d'un fichier sous forme de Chaîne, faire quelque chose comme ceci:

public String openFileToString(String fileName) throws IOException
{
    InputStream is = new BufferedInputStream(new FileInputStream(fileName));

    try {
        InputStreamReader rdr = new InputStreamReader(is, "UTF-8");
        StringBuilder contents = new StringBuilder();
        char[] buff = new char[4096];
        int len = rdr.read(buff);
        while (len >= 0) {
            contents.append(buff, 0, len);
        }
        return buff.toString();
    } finally {
        try {
            is.close();
        } catch (Exception e) {
            // log error in closing the file
        }
    }
}

4voto

GETah Points 10887

Vous pouvez utiliser l' String(byte[] bytes) constructeur. Voir ce lien pour plus de détails. MODIFIER Vous devez également tenir compte de votre plateforme de jeu de caractères par défaut que par la java doc:

Construit une nouvelle Chaîne en décodant le tableau spécifié d'octets à l'aide de la plate-forme du jeu de caractères par défaut. La longueur de la Chaîne est un la fonction de la table de caractères, et ne peut donc pas être égal à la longueur de le tableau d'octets. Le comportement de ce constructeur lorsque la donnée octets ne sont pas valides dans le jeu de caractères par défaut est spécifiée. L' CharsetDecoder classe doit être utilisée lorsque plus de contrôle sur la processus de décodage est nécessaire.

2voto

Bruno Points 47560

Vous pouvez utiliser les méthodes décrites dans cette question (surtout depuis que vous commencez avec un InputStream): En Java, comment puis-je lire/convertir un InputStream à une Chaîne de caractères?

En particulier, si vous ne voulez pas à s'appuyer sur des bibliothèques externes, vous pouvez essayer cette réponse, qui lit l' InputStream via un InputStreamReader en char[] tampon et l'ajoute en StringBuilder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X