BufferedReaderTest
package kr.co.kihd.bufferedoutputstream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class BufferedReaderTest {
public static void main(String[] args) throws Exception {
//주스트림은 바이트 기반
InputStream iStream = System.in;
//보조스트림 첫번째는 바이트를 문자로 바꿔주는 InputStreamReader를 연결함.
Reader reader = new InputStreamReader(iStream);
//보조스트림 두번째는 속도 및 성능 향상을 해주는 BufferedReader를 연결함.
BufferedReader bReader = new BufferedReader(reader);
System.out.print("입력 : ");
//BufferedReader보조스트림은 readLine()사용하기 위해 많이 사용함.
//readLine() : 한줄 단위 읽어들임
String lineString = bReader.readLine();
System.out.println("출력 : " + lineString);
bReader.close();
reader.close();
iStream.close();
}
}
BufferedOutputStream 사용 유무에 따른 시간 비교 + byteArray사용
package kr.co.kihd.bufferedoutputstream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class BufferedOutputStreamTest {
public static void main(String[] args) throws Exception {
File file = new File("C:\\workspace\\chap26(IO입출력2)\\src\\kr\\co\\kihd\\bufferedoutputstream\\We Never Go Alone.mp4");
System.out.println("파일의 크기 : " + (file.length())/1024 + "kbyte");
System.out.println("파일의 크기 : " + ((file.length())/1024)/1024 + "Mbyte");
//주스트림
FileInputStream fInputStream = null;
FileOutputStream fOutputStream = null;
//보조스트림
BufferedInputStream bInputStream = null;
BufferedOutputStream bOutputStream = null;
int dataCount = 0;
long start = 0;
long end = 0;
byte[] bArr = new byte[10000];
//주스티림에 보조스트림을 연결함.(입력)
fInputStream = new FileInputStream(file);
bInputStream = new BufferedInputStream(fInputStream);
fOutputStream = new FileOutputStream("C:\\Temp1\\우리는 결코 혼자가 아니다.mp3");
bOutputStream = new BufferedOutputStream(fOutputStream);
//읽고 저장하기 전 시간 저장
start = System.currentTimeMillis();
//1바이트씩 읽고 1바이트씩 저장하는 경우
while( (dataCount = bInputStream.read(bArr)) != -1) {
fOutputStream.write(bArr,0,dataCount);
}
fOutputStream.flush();
//읽고 저장한 후 시간을 저장
end = System.currentTimeMillis();
System.out.println("BufferedOutputStream을 사용하지 않았을 때 : " + (end - start) + "ms");
//BufferedOutputStream 사용했을 때..
start = System.currentTimeMillis();
//1바이트씩 읽고 1바이트씩 저장하는 경우
while( (dataCount = bInputStream.read(bArr)) != -1) {
bOutputStream.write(bArr, 0, dataCount);
}
fOutputStream.flush();
//읽고 저장한 후 시간을 저장
end = System.currentTimeMillis();
System.out.println("BufferedOutputStream을 사용했을 때 : " + (end - start) + "ms");
//자원 해제
bOutputStream.close();
bInputStream.close();
fInputStream.close();
fOutputStream.close();
}
}
파일의 크기 : 4495kbyte
파일의 크기 : 4Mbyte
BufferedOutputStream을 사용하지 않았을 때 : 7ms
BufferedOutputStream을 사용했을 때 : 0ms
기타 타입 입출력 보조 스트림
package kr.co.kihd.datainputoutputstream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class DataInputOutputStreamTest {
public static void main(String[] args) throws Exception {
//파일객체 생성
File file = new File("C:\\Temp1\\primitiveData.dat");
//주스트림 생성
FileOutputStream fOutputStream = new FileOutputStream(file);
System.out.println("파일의 크기 : " + file.length());
//보조스트림 연결
/*
* 기본타입(int, long, float, String...등) 출력을 하기 위한
* 스트림 DataOutputStream이다.
*/
DataOutputStream dOutputStream = new DataOutputStream(fOutputStream);
/*
* String을 파일에 저장하기 위해서는 writeUTF()를 사용하는데,
* 한글을 3바이트, 영문자는 1바이트 인식한다.
* 하지만, String내보낼 경우 2바이트가 포함된다.
*/
dOutputStream.writeUTF("최지만"); //11바이트 추가
System.out.println("손홍민 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.writeDouble(100.15); //8바이트 추가
System.out.println("100.15 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.writeInt(777); //4바이트 추가
System.out.println("777 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.writeUTF("이순신"); //11바이트 추가
System.out.println("이순신 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.writeDouble(717.15); //8바이트 추가
System.out.println("717.15 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.writeInt(555); //4바이트 추가
System.out.println("555 저장 후 - 파일의 크기 : " + file.length() + "byte");
dOutputStream.flush();
dOutputStream.close();
fOutputStream.close();
//----------------------------------------------------------------------------
System.out.println();
System.out.println("읽어오는 데이터 출력");
//주스트림
FileInputStream fInputStream = new FileInputStream(file);
//보조스트림 연결
DataInputStream dInputStream = new DataInputStream(fInputStream);
//프로그램으로 읽어들일때는 저장할때의 순서와 반드시 동일하게 읽어와야 한다.
for(int i = 0; i<2; i++) {
System.out.println((i+1) + "번째 읽은 문자열 : " + dInputStream.readUTF());
System.out.println((i+1) + "번째 읽은 double값 : " + dInputStream.readDouble());
System.out.println( (i+1) + "번째 읽은 int값 : " + dInputStream.readInt());
}
System.out.println("파일크기(byte) : " + file.length() + "byte 읽었습니다.");
dInputStream.close();
fInputStream.close();
}
}
파일의 크기 : 0
손홍민 저장 후 - 파일의 크기 : 11byte
100.15 저장 후 - 파일의 크기 : 19byte
777 저장 후 - 파일의 크기 : 23byte
이순신 저장 후 - 파일의 크기 : 34byte
717.15 저장 후 - 파일의 크기 : 42byte
555 저장 후 - 파일의 크기 : 46byte
읽어오는 데이터 출력
1번째 읽은 문자열 : 최지만
1번째 읽은 double값 : 100.15
1번째 읽은 int값 : 777
2번째 읽은 문자열 : 이순신
2번째 읽은 double값 : 717.15
2번째 읽은 int값 : 555
파일크기(byte) : 46byte 읽었습니다.
프린트 보조 스트림
package kr.co.kihd.printstream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamTest {
// PrintStream :보조스트림 중에서 개행이 빈번하게 일어날 경우 사용하면 좋음.
public static void main(String[] args) throws Exception {
File file = new File("C:\\Temp1\\printStream.txt");
FileOutputStream fOutputStream = new FileOutputStream(file);
PrintStream pStream = new PrintStream(fOutputStream);
//파일에 출력을 한다.(출력스트림이라서 System.out(콘솔)을 사용해도 된다.)
pStream.println("[프린트 스트림 사용]");
pStream.println("나는");
pStream.println("자바 프로그램으로 ");
pStream.println("프린터가 출력되는 것처럼 ");
pStream.println("프로그램을 만들어서 데이터를 출력한다.");
System.out.println("파일 저장 완료");
//형식 지정자와 매개변수의 갯수를 반드시 동일하게 설정해야한다.
System.out.printf("%d %d\n", 10, 20);
System.out.printf("%.1f %d\n", 10.123, 20);
System.out.printf("%.2f %d\n", 10.123, 20);
System.out.printf("%.2f %s", 10.123, "자바");
pStream.flush();
pStream.close();
fOutputStream.close();
}
}
파일 저장 완료
10 20
10.1 20
10.12 20
10.12 자바
콘솔 입출력
콘솔
시스템을 사용하기 위해 키보드로 입력을 받고 화면으로 출력하는 소프트웨어을 말함.
System.in 필드
package kr.co.kihd.console;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
//System.in
public class SystemInTest {
public static void main(String[] args) throws Exception {
//콘솔로부터 입력을 받기 위해서 System.in필드를 입력스트림에다가 대입함.
InputStream iStream = System.in;
byte[] bArr = new byte[100];
System.out.print("이름 : ");
//키보드로 입력한 데이터를 bArr배열에 저장하고, 읽은 바이트 수를 리턴함.
int nameBytes = iStream.read(bArr); //encoding
System.out.println(Arrays.toString(bArr));
//엔터키(캐리지리턴(13), 라인피드(10) 제외한 나머지를 문자열로 만든다.
String name = new String(bArr,0, nameBytes-2);
System.out.println("입력한 이름 : " + name);
System.out.print("남길 말 : ");
int comBytes = iStream.read(bArr);
System.out.println(Arrays.toString(bArr));
String comment = new String(bArr, 0, comBytes-2);
System.out.println("남긴 말 : ");
iStream.close();
}
}
아스키코드표 출력
package kr.co.kihd.console;
import java.io.IOException;
import java.io.OutputStream;
public class SystemOutTest {
public static void main(String[] args) throws Exception {
/*
* PrintStream(System.out)은 OutputStream의 자손클래스 이므로
* 얼마든지 대입이 가능하다. (다형성)
*
*/
OutputStream oStream = System.out;
//아스키코드표 출력
for(byte b=48; b<58; b++) {
System.out.print(b + "\t");
System.out.print("아스키 코드표의 문자값 : ");
oStream.write(b);
System.out.println();
}
oStream.write(13); //출력스트림을 이용한 줄바꿈
for(byte b=97; b<127; b++) {
System.out.print(b + "\t"); //기계가 알아보기 쉽다.
System.out.print("아스키 코드표의 문자값 : ");
oStream.write(b); //사람이 알아보기 쉽다.
System.out.println();
}
oStream.write(13);
}
}
48 아스키 코드표의 문자값 : 0
49 아스키 코드표의 문자값 : 1
50 아스키 코드표의 문자값 : 2
51 아스키 코드표의 문자값 : 3
52 아스키 코드표의 문자값 : 4
53 아스키 코드표의 문자값 : 5
54 아스키 코드표의 문자값 : 6
55 아스키 코드표의 문자값 : 7
56 아스키 코드표의 문자값 : 8
57 아스키 코드표의 문자값 : 9
97 아스키 코드표의 문자값 : a
98 아스키 코드표의 문자값 : b
99 아스키 코드표의 문자값 : c
100 아스키 코드표의 문자값 : d
101 아스키 코드표의 문자값 : e
102 아스키 코드표의 문자값 : f
103 아스키 코드표의 문자값 : g
104 아스키 코드표의 문자값 : h
105 아스키 코드표의 문자값 : i
106 아스키 코드표의 문자값 : j
107 아스키 코드표의 문자값 : k
108 아스키 코드표의 문자값 : l
109 아스키 코드표의 문자값 : m
110 아스키 코드표의 문자값 : n
111 아스키 코드표의 문자값 : o
112 아스키 코드표의 문자값 : p
113 아스키 코드표의 문자값 : q
114 아스키 코드표의 문자값 : r
115 아스키 코드표의 문자값 : s
116 아스키 코드표의 문자값 : t
117 아스키 코드표의 문자값 : u
118 아스키 코드표의 문자값 : v
119 아스키 코드표의 문자값 : w
120 아스키 코드표의 문자값 : x
121 아스키 코드표의 문자값 : y
122 아스키 코드표의 문자값 : z
123 아스키 코드표의 문자값 : {
124 아스키 코드표의 문자값 : |
125 아스키 코드표의 문자값 : }
126 아스키 코드표의 문자값 : ~
콘솔 테스트
package kr.co.kihd.console;
import java.io.Console;
public class ConsoleTest {
public static void main(String[] args) {
Console console = System.console();
/*
* Console클래스는 실행시 이클립스의 콘솔뷰에서 하게 되면 null을 리턴한다.
* 그래서 NullPointerException을 발생시킨다.
* 반드시 명령 프롬프트에서 실행해야한다.
*/
System.out.print("id : ");
String id = console.readLine();
System.out.print("password : ");
//콘솔창에 입력한 문자가 에코출력, 즉 보이지 않는다.
char[] password = console.readPassword();
String pStr = new String(password);
System.out.println("--------------------------------------");
System.out.println("id" + id);
System.out.println("pwd" + pStr);
}
}