codestory

Die Anleitung zu Java OutputStream

  1. OutputStream
  2. write(int)
  3. write(byte[])
  4. write(byte[], int, int)
  5. close()
  6. flush()

1. OutputStream

OutputStream ist eine Klasse im Paket java.io. Das ist eine Basisklasse, die einen Zeichenstrom von bytes (stream of bytes) darstellt, um bytes in ein Ziel wie eine Datei zu schreiben.
public abstract class OutputStream implements Closeable, Flushable
Grundsätzlich können Sie die Klasse OutputStream nicht direkt verwenden, da es sich um eine abstrakte Klasse handelt. In einem bestimmten Fall können Sie jedoch eine der Unterklasse verwenden.
OutputStream methods
public static OutputStream nullOutputStream()   
 
public abstract void write(int b) throws IOException
public void write(byte b[]) throws IOException  
public void write(byte b[], int off, int len) throws IOException  

public void flush() throws IOException  
public void close() throws IOException

2. write(int)

public abstract void write(int b) throws IOException
Schreibt ein byte in OutputStream. Der Parameter b ist der Code ohne Vorzeichen von byte, der ein Integer zwischen 0 und 255 ist. Wenn der Wert von b außerhalb des obigen Bereichs liegt, wird er ignoriert.
OutputStream_write_ex1.java
package org.o7planning.outputstream.ex;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStream_write_ex1 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();

        // FileOutputStream  
        OutputStream os = new FileOutputStream(file);
       
        // 'J'
        os.write((int)'J'); // 74
        
        // 'P'
        os.write('P'); // 80 (Automatically converted to int)
        
        // '日' = 3 bytes UTF-8: [230, 151, 165]
        os.write(230);  
        os.write(151);  
        os.write(165);  
        
        // '本' = 3 bytes UTF-8: [230, 156, 172]
        os.write(230);    
        os.write(156);     
        os.write(172);     
        
        // '-'
        os.write('-');  // 45 (Automatically converted to int)
        
        // '八' = 3 bytes UTF-8: [229, 133, 171]
        os.write(229);    
        os.write(133);    
        os.write(171);    
        
        // '洲' = 3 bytes UTF-8: [230, 180, 178]
        os.write(230);  
        os.write(180);  
        os.write(178);   
        
        // Close
        os.close();
    }
}
Output:
out-file.txt
JP日本-八洲
Die Datei UTF-8 verwenden 1, 2, 3 oder 4 bytes um ein Zeichen zu speichern. Das Bild unten zeigt die bytes in der neu erstellten Datei.

3. write(byte[])

public void write(byte[] b) throws IOException
Schreiben Sie ein Array byte in OutputStream.
OutputStream_write_ex2.java
package org.o7planning.outputstream.ex;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStream_write_ex2 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();

        // FileOutputStream
        OutputStream writer = new FileOutputStream(file);  
        
        byte[] bytes = new byte[] { 'J', 'P', //
                         (byte)230, (byte)151, (byte)165, // '日' = 3 bytes UTF-8: [230, 151, 165]
                         (byte)230, (byte)156, (byte)172, // '本' = 3 bytes UTF-8: [230, 156, 172]
                         '-', //
                         (byte)229, (byte)133, (byte)171, // '八' = 3 bytes UTF-8: [229, 133, 171]
                         (byte)230, (byte)180, (byte)178, // '洲' = 3 bytes UTF-8: [230, 180, 178]
                         };  
        
        writer.write(bytes);  
        // Close
        writer.close();
    }
}
Output:
out-file.txt
JP日本-八洲

4. write(byte[], int, int)

public void write(byte b[], int offset, int len) throws IOException
Schreiben Sie ein Teil eines Array byte in OutputStream. Schreiben Sie bytes von Index offset zu Index offset+len.
OutputStream_write_ex3.java
package org.o7planning.outputstream.ex;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStream_write_ex3 {

    public static void main(String[] args) throws IOException {
        
        // ByteArrayOutputStream is a subclass of OutputStream.
        OutputStream outputStream = new ByteArrayOutputStream();  
        
        byte[] bytes = new byte[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        
        outputStream.write(bytes, 2, 5); // '2', ...'6'
        
        String s = outputStream.toString();
        System.out.println(s);
        
        outputStream.close();
    }
}
Output:
23456

5. close()

public void close() throws IOException
Die Methode close() wird verwendet, um diesen Stream zu schließen. Die Methode flush() wird zuerst aufgerufen. Sobald der Stream geschlossen wurde, führen weitere Aufrufe von write() oder flush() dazu, dass eine IOException ausgelöst wird. Das Schließen eines zuvor geschlossenen Streams hat keine Auswirkung.
public interface Closeable extends AutoCloseable
Die Klasse Writer implementiert die Interface Closeable. Wenn Sie die Code nach dem Regel von AutoCloseable schreiben, schließt das System den Stream automatisch für Sie, ohne die Methode close() direkt aufrufen zu müssen.
OutputStream_close_ex1.java
package org.o7planning.outputstream.ex;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStream_close_ex1 {

    // Windows path: C:/Somedirectory/out-file.txt
    private static final String file_path = "/Volumes/Data/test/out-file.txt";

    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        // Create parent folder:
        file.getParentFile().mkdirs();

        try (OutputStream writer = new FileOutputStream(file)) {
            writer.write((int) '1');
            writer.write('2');
            writer.write((int) '3');
        }
    }
}
  • Die Anleitung zu Java Closeable

6. flush()

public void flush() throws IOException
Die Daten, die Sie in OutputStream schreiben, werden manchmal vorläufig im Puffer gespeichert. Die Methode flush() wird verwendet, um die Daten in das Ziel zu leeren (flush).
Sie können den folgenden Artikel zu BufferedOutputStream lesen, um mehr über die Methode flush() zu erfahren.
Wenn das beabsichtigte Ziel dieses OutputStream eine vom zugrunde liegenden Betriebssystem bereitgestellte Abstraktion ist, z. B. eine Datei, garantiert das Leeren des Streams nur, dass zuvor in den Stream geschriebene bytes zum Schreiben an das Betriebssystem übergeben werden. Es kann nicht garantiert werden, dass sie tatsächlich auf ein physisches Gerät wie ein Festplattenlaufwerk geschrieben werden

Die Anleitungen Java IO

Show More