2018-7-18 Java 입출력

Java IO

  • 데이터는 키보드를 통해 입력될 수도 네트워크나 파일을 통해 입력될 수도 있다. 데이터베이스는 반대로 모니터로 출력될 수도 파일로 출력되어 저장될 수도 있으며 네트워크로 출력되어 전송될 수도 있다.
  • 프로그램이 데이터를 입력받을 때는 입력스트림(InputStream), 데이터를 보낼 때에는 출력스트림(OutputStream)

    데이터가 들어오면 입력스트림, 데이터가 나가면 출력스트림이다.

  • 데이터를 교환하기 위해서는 입출력 스트림이 각각 필요하다. 스트림은 단방향이므로 하나의 스트림으로 입출력을 단정할 수는 없다.

스트림의 종류

바이트기반

  • 바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 주고 받을 수 있다.

    문자기반

  • 문자 기반 스트림은 오로지 문자만 받고 보낼 수 있게 특화되어 있다.

InputStream

  • 바이트기반 입력 스트림의 최상위 클래스. 모든 바이트기반 입력스트림은 이 클래스를 상속받는다.

콘솔입출력

  • 콘솔은 키보드로 입출력을 받고 화면으로 출력을 하는 소프트웨어다. 자바에서는 콘솔로 입력을 받을때는 System.in 출력을 할때는 System.out을 사용을 하고, 에러를 출력할 때는 System.err를 사용한다.

System.out

  • System.out.write(int b)는 아스키코드값을 문자로 출력을 시켜준다.
  • System.out이 PrintStream타입의 필드라서 print(), println()메소드를 이용하자.

Console Class

package book;

import java.io.Console;

public class ConsoleExample {
    public static void main(String[] args) {
        Console console = System.console();

        System.out.print("아이디 : ");
        String id = console.readLine();

        System.out.print("password : ");
        char[] charPass = console.readPassword();
        String strPassword = new String(charPass);

        System.out.println("--------------");
        System.out.println(id);
        System.out.println(strPassword);
    }
}

  • 반드시 터미널에서 실행을 해야된다. IDE에서는 안된다. 컴파일을 한 뒤, 상위패키지로 가서 $java pacakgeName.ClassName으로 실행을 해야한다.
import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class BufferInputStreamEx {
    public static void main(String[] args) throws Exception {
        long start = 0;
        long end = 0;

        FileInputStream f1 = new FileInputStream("/Users/jaeyeonkim/Desktop/java-study/src/main/resources/io-1.jpg");
        start = System.currentTimeMillis();
        while (f1.read() != -1) {
        }
        end = System.currentTimeMillis();
        System.out.println("버퍼를 사용하지 않을 때 : " + (end - start) + "ms");
        f1.close();

        FileInputStream f2 = new FileInputStream("/Users/jaeyeonkim/Desktop/java-study/src/main/resources/io-1.jpg");
        BufferedInputStream bis = new BufferedInputStream(f2);
        start = System.currentTimeMillis();
        while (bis.read() != -1) {
        }
        end = System.currentTimeMillis();
        System.out.println("버퍼를 사용할 때 : " + (end - start) + "ms");
        bis.close();
        f2.close();
    }
}
//result
버퍼를 사용하지 않을 때 : 1171ms
버퍼를 사용할 때 : 18ms
Written on July 18, 2018