Comment convertir un SsortingngReader en une chaîne?

J’essaie de reconvertir mon SsortingngReader en une Ssortingng normale, comme indiqué:

 Ssortingng ssortingng = reader.toSsortingng(); 

Mais quand j’essaie de lire cette chaîne, comme ceci:

 System.out.println("ssortingng: "+ssortingng); 

Tout ce que je reçois est une valeur de pointeur, comme ceci:

 java.io.SsortingngReader@2c552c55 

Est-ce que je fais quelque chose de mal en lisant la chaîne?

    La méthode toSsortingng SsortingngReader ne renvoie pas les tampons internes SsortingngReader .

    Vous aurez besoin de lire le SsortingngReader pour obtenir cela.

    Je recommande d’utiliser la surcharge de read qui accepte un tableau de caractères. Les lectures en bloc sont plus rapides que les lectures à un seul caractère.

    c’est à dire.

     //use ssortingng builder to avoid unnecessary ssortingng creation. SsortingngBuilder builder = new SsortingngBuilder(); int charsRead = -1; char[] chars = new char[100]; do{ charsRead = reader.read(chars,0,chars.length); //if we have valid chars, append them to end of ssortingng. if(charsRead>0) builder.append(chars,0,charsRead); }while(charsRead>0); Ssortingng ssortingngReadFromReader = builder.toSsortingng(); System.out.println("Ssortingng read = "+ssortingngReadFromReader); 
     import org.apache.commons.io.IOUtils; Ssortingng ssortingng = IOUtils.toSsortingng(reader); 

    Si vous préférez ne pas utiliser de bibliothèques externes:

      Scanner scanner = new Scanner(reader).useDelimiter("\\A"); Ssortingng str = scanner.hasNext() ? scanner.next() : ""; 

    La raison de la hasNext() est que next() explose avec une NoSuchElementException si le lecteur NoSuchElementException une NoSuchElementException vide (de longueur nulle).

    Ou en utilisant CharStreams de la bibliothèque Googles Guava:

     CharStreams.toSsortingng(ssortingngReader); 

    reader.toSsortingng(); vous donnera les résultats de l’appel de la toSsortingng() générique toSsortingng() partir de la classe Object .

    Vous pouvez utiliser la méthode read() :

     int i; do { i = reader.read(); char c = (char) i; // do whatever you want with the char here... } while (i != -1); 

    L’appel à la méthode toSsortingng () donnera l’object de la classe SsortingngReader. Si vous voulez son contenu, vous devez appeler la méthode read sur SsortingngReader comme ceci:

     public class SsortingngReaderExample { public static void main(Ssortingng[] args) { Ssortingng s = "Hello World"; // create a new SsortingngReader SsortingngReader sr = new SsortingngReader(s); try { // read the first five chars for (int i = 0; i < 5; i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } } } 

    Pour les tutoriels, vous pouvez utiliser ce lien .

    Vous imprimez le toSsortingng() de l’object SsortingngReader réel, PAS le contenu de la Ssortingng que SsortingngReader

    Vous devez utiliser les méthodes read() et / ou read(char[] cbuf, int off, int len) pour lire les caractères réels de la chaîne.

    Si vous utilisez la méthode toSsortingng() dans un object SsortingngReader , vous imprimez la position de mémoire de l’object. Vous avez utilisé une de ces méthodes:

    read() Lit un seul caractère.

    read(char[] cbuf, int off, int len) Lit les caractères dans une partie d’un tableau.

    Voici un exemple:

      Ssortingng s = "Hello World"; // create a new SsortingngReader SsortingngReader sr = new SsortingngReader(s); try { // read the first five chars for (int i = 0; i < s.length(); i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } 

    Une autre solution native (Java 8+) pourrait être de transmettre l’object SsortingngReader à un BufferedReader et de le diffuser par le SsortingngReader des lignes suivantes:

     try (BufferedReader br = new BufferedReader(ssortingngReader)) { br.lines().forEach(System.out::println); }