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