Java IO 패키지 정리 2 - 보조스트림
InputStreamReader 예제
package sec05.exam01.support;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class InputStreamReaderExample {
public static void main(String[] args) throws Exception {
//콘솔에서 한글 입력받기 : 소스 스트림이 바이트 기반 스트림이지만.
//데이터가 문자일 경우 사용할 수 있다.
//Reader 와 Writer는 문자 단위로 입출력하기 때문에 바이트 기반 스트림보다는 편리하다.
//문자셋의 종류를 지정할 수 있기 때문에 다양한 문자를 입출력할 수 있다.
//입력 스트림
//소스 스트림이 바이트 기반 스트림이다. 데이터는 문자이다.
InputStream is = System.in;
//다른 스트림과 연결이 되어 여러가지 편리한 기능을 제공해주는 보조 스트림
//문자변환, 입출력 성능향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공
//InputStreamReader 는 바이트 입력 스트림에 연결되어 문자 입력 스트림인 Reader로 변환시키는 보조 스트림이다.
Reader reader = new InputStreamReader(is);
int readCharNo;
char[] cbuf = new char[100];
while((readCharNo = reader.read(cbuf)) != -1 ) {
String data = new String(cbuf,0, readCharNo);
System.out.println(data);
}
reader.close();
}
}
OutputStreamWriter 예제
package sec05.exam01.support;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class OutputStreamWriterExample {
public static void main(String[] args) throws Exception {
//바이트 출력 스트림
FileOutputStream fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/OutputStreamWriter.txt");
//문자 출력 스트림
Writer writer = new OutputStreamWriter(fos);
String data = "바이트 출력 스트림을 문자 출력 스트림으로 변환";
writer.write(data);
writer.flush();
writer.close();
fos.close();
System.out.println("파일 저장 끝 - ");
}
}
BufferedInputStream 예제
package sec05.exam01.support;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class P_BufferedInputStreamExample {
public static void main(String[] args) throws Exception {
/*
입출력 성능에 영향을 미치는 입출력 소스
1. 하드 디스크, 2. 느린 네트워크
버퍼를 이용한 해결
- 입출력 소스와 직접 작업하지 않고, 버퍼와 작업하므로 실행 성능을 향상
프로그램은 쓰기 속도가 향상
버퍼가 차게되면 데이터를 한꺼번에 하드 디스크로 보내므로써 출력 횟수를 줄여줌.
*바이트 기반 스트림 : BufferedInputStream , BufferedOutputStream
*문자 기반 스트림 : BufferedReader , BufferedWriter
BufferedInputStream : 바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림.
BufferedReader : 문자 입력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
*/
long start = 0;
long end = 0;
FileInputStream fis1 = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
start = System.currentTimeMillis();
while(fis1.read() != -1){}
end = System.currentTimeMillis();
System.out.println("사용하지 않았을때 : " + (end - start) + "ms");
fis1.close();
//바이트 입력 스트림
FileInputStream fis2 = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
//바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림.
BufferedInputStream bis = new BufferedInputStream(fis2); //버퍼 스트림 생성
//bis = new BufferedInputStream(바이트 입력 스트림);
start = System.currentTimeMillis();
while(bis.read() != -1){}
end = System.currentTimeMillis();
System.out.println("사용했을 때 : " + (end - start) + "ms");
fis2.close();
/*
사용하지 않았을때 : 61ms
사용했을 때 : 12ms
*/
}
}
BufferedOutputStream 예제
package sec05.exam01.support;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class P_BufferedOutputStreamExample {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/*
* BufferedOutputStream 은 바이트 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
* BufferedWriter 는 문자 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
*/
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
int data = -1;
long start = 0;
long end = 0;
//바이트 스트림으로 읽어서
fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
bis = new BufferedInputStream(fis);
//바이트 스트림에 쓰기
fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test/kkk.jpg");
start = System.currentTimeMillis();
while((data = bis.read()) != -1) {
//바이트 스트림에 쓰기
fos.write(data);
}
fos.flush();
end = System.currentTimeMillis();
fos.close();
bis.close();
fis.close();
System.out.println("사용하지 않았을 때: " + (end-start) + "ms");
// ####################################################
//바이트 스트림으로 읽어서
fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/test/house.jpg");
bis = new BufferedInputStream(fis);
//바이트 스트림에 쓰기
fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test/kkk.jpg");
//바이트 출력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
bos = new BufferedOutputStream(fos);
start = System.currentTimeMillis();
while((data = bis.read()) != -1) {
//보조 바이트 스트림에 쓰기
bos.write(data);
}
fos.flush();
end = System.currentTimeMillis();
fos.close();
bis.close();
fis.close();
System.out.println("사용했을 때: " + (end-start) + "ms");
/*
사용하지 않았을 때: 221ms
사용했을 때: 3ms
*/
}
}
InputStreamReader , BufferedReader 예제
package sec05.exam01.support;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class P_BufferedReaderExample {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/*
입출력 성능에 영향을 미치는 입출력 소스
1. 하드 디스크, 2. 느린 네트워크
버퍼를 이용한 해결
- 입출력 소스와 직접 작업하지 않고, 버퍼와 작업하므로 실행 성능을 향상
프로그램은 쓰기 속도가 향상
버퍼가 차게되면 데이터를 한꺼번에 하드 디스크로 보내므로써 출력 횟수를 줄여줌.
*바이트 기반 스트림 : BufferedInputStream , BufferedOutputStream
*문자 기반 스트림 : BufferedReader , BufferedWriter
BufferedInputStream : 바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림.
BufferedReader : 문자 입력 스트림에 연결되어 버퍼를 제공해 주는 보조 스트림
*/
//콘솔라인 입력 스트림
InputStream is = System.in;
Reader reader = new InputStreamReader(is);
//BufferedReader를 사용해서 콘솔로 부터 라인 단위로 읽기
BufferedReader br = new BufferedReader(reader);
//br = new BufferedReader(문자입력 스트림);
System.out.print("입력 : ");
/*
* BufferedReade 는 readLine() 메소드를 추가적으로 가지고 있다.
* 이 메소드를 이용하면 \r , \n 로 구분된 행 단위의 문자열을 한꺼번에 읽을 수 있다.
*
*/
String lineString = br.readLine();
System.out.print("출력 : " + lineString);
}
}
DataOutputStream , DataInputStream 예제
package sec05.exam01.support;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Q_DataInputOutputStreamExample {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileOutputStream fos = new FileOutputStream("/Users/k/Documents/workspace/chat/src/DataOutputStream.txt");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("홍긴둥둥");
dos.writeDouble(2.3);
dos.writeInt(1);
dos.writeUTF("콩민");
dos.writeDouble(4.333);
dos.writeInt(222);
dos.flush();
dos.close();
fos.close();
FileInputStream fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/DataOutputStream.txt");
DataInputStream dis = new DataInputStream(fis);
for(int i = 0; i < 2; i++) {
String name = dis.readUTF();
double score = dis.readDouble();
int order = dis.readInt();
System.out.println(name + " : " + score + " : " + order);
}
dis.close();
fis.close();
}
/*
* 홍긴둥둥 : 2.3 : 1
콩민 : 4.333 : 222
*/
}
InetAddress 예제
package sec06.exam01.inetaddress;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressExample {
public static void main(String[] args) {
try {
InetAddress local = InetAddress.getLocalHost();
System.out.println("내 컴퓨터 ip 주소 :" +local.getHostAddress());
InetAddress [] iaArr = InetAddress.getAllByName("www.naver.com");
for(InetAddress remote : iaArr) {
System.out.println("naver ip 주소 :" +remote.getHostAddress());
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
참고
https://blog.naver.com/plateauh/222085091595
https://estindev.tistory.com/entry/%EC%9E%90%EB%B0%94-IO-%EC%A0%95%EB%A6%AC
https://willbfine.tistory.com/413?category=835334
'웹개발 > Java' 카테고리의 다른 글
자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 (0) | 2022.10.06 |
---|---|
자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 (1) | 2022.10.05 |
기계어부터 객체지향에 이르기까지 정리 (0) | 2022.10.04 |
Java IO 패키지 정리 3 - socket 통신 (0) | 2021.03.17 |
Java IO 패키지 정리 1 (0) | 2021.03.17 |