수색…


통사론

  • int read (byte [] b) IOException를 throw합니다.

비고

대부분의 경우, InputStream 직접 사용하지 않고, BufferedStream 사용하는 것에주의 BufferedStream . 이것은 InputStream 이 read 메소드가 호출 될 때마다 소스에서 읽 기 때문입니다. 이로 인해 커널과의 컨텍스트 스위치에서 중요한 CPU 사용이 발생할 수 있습니다.

InputStream를 String으로 읽어 들이기

때로는 바이트 입력을 String으로 읽을 수 있습니다. 이렇게하려면 bytechar 사용되는 "native Java"UTF-16 Codepoints 사이를 변환하는 것을 찾아야합니다. InputStreamReader 로 끝난다.

프로세스 속도를 약간 높이려면 버퍼를 할당하는 것이 "보통"이므로 입력에서 읽을 때 오버 헤드가 너무 많이 들지 않습니다.

Java SE 7
public String inputStreamToString(InputStream inputStream) throws Exception {
     StringWriter writer = new StringWriter();

     char[] buffer = new char[1024];
     try (Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) {
           int n;
           while ((n = reader.read(buffer)) != -1) {
                // all this code does is redirect the output of `reader` to `writer` in
                // 1024 byte chunks
                writer.write(buffer, 0, n);
           }
     }
     return writer.toString();
}

이 예제를 Java SE 6 (이하) 호환 코드로 변환하는 것은 독자의 연습 문제로 생략되었습니다.

OutputStream에 바이트를 쓰는 중

한 번에 1 바이트 씩 OutputStream 바이트를 쓰는 중

OutputStream stream = object.getOutputStream();

byte b = 0x00;
stream.write( b );

바이트 배열 쓰기

byte[] bytes = new byte[] { 0x00, 0x00 };

stream.write( bytes );

바이트 배열 섹션 작성하기

int offset = 1;
int length = 2;
byte[] bytes = new byte[] { 0xFF, 0x00, 0x00, 0xFF };

stream.write( bytes, offset, length );

스트림 닫기

대부분의 스트림을 다 끝내면 닫아야합니다. 그렇지 않으면 메모리 누수가 발생하거나 파일을 열어 둘 수 있습니다. 예외가 발생하더라도 스트림이 닫히는 것이 중요합니다.

Java SE 7
try(FileWriter fw = new FileWriter("outfilename");
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //handle this however you 
}

try-with-resources 보장, 블록이 종료 될 때 리소스가 닫혀 있는지, 일반적인 제어 흐름으로 발생했는지 또는 예외로 인해 발생했는지 등을 기억하십시오.

Java SE 6

리소스가있는 경우 시도가 옵션이 아니거나 Java 6 이전 버전의 이전 버전을 지원하는 경우가 있습니다. 이 경우 finally 블록을 사용하는 것이 적절하게 처리됩니다.

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt");
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //handle this however you want
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //typically not much you can do here...
    }
}

래퍼 스트림을 닫으면 기본 스트림도 닫힙니다. 즉, 스트림을 랩핑하고 래퍼를 닫은 다음 원래 스트림을 계속 사용할 수 없습니다.

입력 스트림을 출력 스트림에 복사

이 함수는 두 스트림간에 데이터를 복사합니다.

void copy(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[8192];
    while ((bytesRead = in.read(buffer)) > 0) {
        out.write(buffer, 0, bytesRead);
    }
}

예 -

 // reading from System.in and writing to System.out
copy(System.in, System.out);

입력 / 출력 스트림 배치

OutputStreamInputStream 에는 여러 가지 클래스가 있으며 각각 고유 한 기능이 있습니다. 스트림을 다른 스트림으로 래핑하면 두 스트림의 기능을 모두 사용할 수 있습니다.

여러 번 스트림을 래핑 할 수 있으며, 순서를 기록하십시오.

유용한 조합

버퍼를 사용하면서 파일에 문자 쓰기

File myFile = new File("targetFile.txt");
PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(myFile)));

버퍼를 사용하는 동안 파일에 쓰기 전에 데이터 압축 및 암호화

Cipher cipher = ... // Initialize cipher
File myFile = new File("targetFile.enc");
BufferedOutputStream outputStream = new BufferedOutputStream(new DeflaterOutputStream(new CipherOutputStream(new FileOutputStream(myFile), cipher)));

입 / 출력 스트림 래퍼 목록

싸개 기술
BufferedOutputStream / BufferedInputStream OutputStream 한 번에 한 바이트 씩 데이터를 쓰는 동안 BufferedOutputStream 은 데이터를 청크로 씁니다. 이렇게하면 시스템 호출 수가 줄어들어 성능이 향상됩니다.
DeflaterOutputStream / DeflaterInputStream 데이터 압축을 수행합니다.
InflaterOutputStream / InflaterInputStream 데이터 압축 해제를 수행합니다.
CipherOutputStream / CipherInputStream 데이터를 암호화 / 해독합니다.
DigestOutputStream / DigestInputStream 데이터 무결성을 확인하기 위해 Message Digest를 생성합니다.
CheckedOutputStream / CheckedInputStream CheckSum을 생성합니다. CheckSum은 Message Digest의 좀 더 간단한 버전입니다.
DataOutputStream / DataInputStream 프리미티브 데이터 유형 및 문자열 작성을 허용합니다. 바이트를 쓰는 것을 의미합니다. 플랫폼에 독립적입니다.
PrintStream 프리미티브 데이터 유형 및 문자열 작성을 허용합니다. 바이트를 쓰는 것을 의미합니다. 플랫폼에 따라 다름.
OutputStreamWriter OutputStream를 라이터로 변환합니다. Writer가 문자를 처리하는 동안 OutputStream은 바이트를 처리합니다.
PrintWriter OutputStreamWriter를 자동으로 호출합니다. 프리미티브 데이터 유형 및 문자열 작성을 허용합니다. 엄밀히 말하면 글자 쓰기와 글자 쓰기에 가장 적합합니다.

DataInputStream의 예

package com.streams;  
import java.io.*;    
public class DataStreamDemo {  
  public static void main(String[] args) throws IOException {  
    InputStream input = new FileInputStream("D:\\datastreamdemo.txt");  
    DataInputStream inst = new DataInputStream(input);  
    int count = input.available();  
    byte[] arr = new byte[count];  
    inst.read(arr);  
    for (byte byt : arr) {  
      char ki = (char) byt;  
      System.out.print(ki+"-");  
    }  
  }  
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow