2011-10-25 6 views
0

Préface: Je suis un Noob Java total ... Je viens d'écrire Hello World hier. Aie pitié de mon moi noob.GZipping de l'entrée standard à la sortie standard en Java

Je ne suis pas sûr de savoir comment lire depuis l'entrée ou la sortie standard vers la sortie standard en Java. Je sais qu'il y a des choses comme Scanners et System.out.println, mais cela ne semble pas s'appliquer directement à ce que j'essaie de faire.

En particulier, j'essaie d'utiliser GZip sur l'entrée standard et de sortir le résultat compressé vers la sortie standard. Je vois qu'il y a un GZipOutputStream class que je vais certainement vouloir utiliser. Cependant, comment puis-je initialiser le flux de sortie pour diriger vers la sortie std? En outre, comment puis-je simplement lire à partir de l'entrée standard?

Comment puis-je accomplir ceci? Comment compresser l'entrée std et sortir le résultat en sortie std?

(Voici un schéma de ce que je suis en train d'accomplir: entrée Std -> GZIP (via mon programme Java) -> Sortie std (la version compressée de l'entrée std)

Répondre

3

Jetez un oeil à la suivant constructeur:.. GZIPInputStream(InputStream in) pour stdin comme InputStream, utilisez System.in lecture du flux se fait avec le read(byte[] buf, int off, int len) méthodolo- jeter un oeil à la documentation pour une description détaillée l'ensemble serait quelque chose comme

GZIPInputStream i = new GZIPInputStream(System.in); 
byte[] buffer = new byte[1024]; 
int n = i.read(buffer, 0,buffer.length) 
System.out.println("Bytes read: " + n); 
.

Personnellement, j'ai trouvé des flux en Java pour avoir une courbe d'apprentissage abrupte, je recommande donc de lire un tutoriel en ligne. Je vais le laisser comme un exercice pour comprendre la sortie.

- Avertissement: n'ont pas réellement essayé le code

+0

Ceci est utile, bien que je ne suis pas réellement utiliser GZIPInputStream puisque je ne ai pas besoin de décompresser l'entrée. –

+0

Vous pouvez utiliser une approche similaire avec la création de GZIPOutputStream (System.out). –

+0

Certainement, c'est pourquoi j'ai dit que c'était utile et lui a donné un upvote! –

0
import java.io.IOException; 
import java.util.zip.GZIPOutputStream; 

public class InToGzipOut { 
    private static final int BUFFER_SIZE = 512; 

    public static void main(String[] args) throws IOException { 
     byte[] buf = new byte[BUFFER_SIZE]; 
     GZIPOutputStream out = new GZIPOutputStream(System.out); 
     int len; 
     while ((len = System.in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
     out.finish(); 

    } 
} 
Questions connexes