quilt code
[고급자바] IO (3) 본문
1. 입출력 성능향상을 위한 보조스트림 예제 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package kr.or.ddit.basic;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class T11BufferedIOTest {
public static void main(String[] args) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream("d:/D_Other/bufferTest.txt");
// 버퍼의 크기를 지정하지 않으면 기본적으로 버퍼의 크기가 8192byte(8Kb)로 설정된다.
// 버퍼의 크기가 5인 스트림 객체 생성
bos = new BufferedOutputStream(fos, 5);
for(char ch='1'; ch <= '9'; ch++) {
System.out.println("쓰기작업.");
bos.write(ch);
}
bos.flush(); // 작업을 종료하기 전에 버퍼에 남아있는 데이터를 모두 출력시킨다.
// close시 자동으로 호출됨. 예전에는 없으면 안됐는데 버전이 업그레이드 되면서 없어도 실행 및 저장이 됨
System.out.println("작업 끝...");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
|
cs |
2. 성능향상을 위한 보조스트림2 (문자기반의 Buffered 스트림 예제)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package kr.or.ddit.basic;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class T12BufferedIOTest {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null; // 한줄씩 읽는 기능 제공
try {
// 이클립스에서 만든 자바 프로그램이 실행되는 기본 위치는 해당 '프로젝트폴더'가 기본 위치가 된다.
fr = new FileReader("./src/kr/or/ddit/basic/T11BufferedIOTest.java"); //상대경로
/*int data = 0;
while((data = fr.read()) != -1){
System.out.print((char) data);
}
*/
br = new BufferedReader(fr);
String temp = "";
int cnt = 1;
while((temp = br.readLine()) != null) {
System.out.printf("%4d : %s\n", cnt++, temp);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
|
cs |
3. 기본타입 입출력 기능 보조스트림 예제
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package kr.or.ddit.basic;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class T13DataIOStreamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("d:/D_Other/test.dat");
// DataOutputStream은 출력용 데이터를 자료형에 맞게 출력해 준다.
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("홍길동"); // 문자열 데이터 출력(UTF-8)
dos.writeInt(17); // 정수형으로 데이터 출력
dos.writeFloat(3.14f); // 실수형(Float)으로 데이터 출력
dos.writeDouble(3.14); // 실수형(Double)으로 데이터 출력
dos.writeBoolean(true); // 논리형으로 데이터 출력
System.out.println("출력 완료...");
dos.close();
/////////////////////////////////////////////////////////////
// 출력한 자료 읽어오기
DataInputStream dis = new DataInputStream(
new FileInputStream("d:/D_Other/test.dat")); // 객체 바로 생성
System.out.println("문자열 자료 : " + dis.readUTF());
System.out.println("정수형 자료 : " + dis.readInt());
System.out.println("실수형(Float) 자료 : " + dis.readFloat());
System.out.println("실수형(Double) 자료 : " + dis.readDouble()); // 읽는 순서를 바꾼다면?(float<->double) 원래 값이 유지가 안됨
System.out.println("논리형 자료 : " + dis.readBoolean());
dis.close();
}
}
|
cs |
4. 프린터 기능을 제공하는 보조스트림
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package kr.or.ddit.basic;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
public class T14PrintStreamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("d:/D_Other/print.txt");
// PrintStream은 모든 데이터를 출력할 수 있는 기능을 제공하는 보조스트림이다.
PrintStream out = new PrintStream(fos);
out.println("안녕하세요. PrintStream입니다.\n");
out.println("안녕하세요. PrintStream입니다2.");
out.println("안녕하세요. PrintStream입니다3.");
out.println(out); // 객체 출력
out.println(3.14);
System.out.println();
////////////////////////////////////////////
/*
* PrintWriter가 PrintStream보다 다양한 인코딩의 문자처리에 적합하지만 예전부터 써 오던 객체라 계속 사용중임.
*/
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream("d:/D_Other/print2.txt"), "UTF-8"));
pw.print("안녕하세요. PrintWriter 입니다.\n");
pw.println("안녕하세요. PrintWriter 입니다2.");
pw.println("안녕하세요. PrintWriter 입니다3.");
pw.close();
}
}
|
cs |
5. 객체 입출력을 위한 보조스트림 예제
1)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package kr.or.ddit.basic;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class T15ObjectStreamTest {
public static void main(String[] args) {
Member mem1 = new Member("정재현", 10, "대전");
Member mem2 = new Member("이태민", 20, "광주");
Member mem3 = new Member("나재민", 30, "대구");
Member mem4 = new Member("김준면", 40, "서울");
ObjectOutputStream oos = null;
try {
// 객체를 파일로 저장하기
// 출력용 스트림객체 생성하기
oos = new ObjectOutputStream(
new FileOutputStream("d:/D_Other/memObj.bin"));
// 객체 쓰기 작업
oos.writeObject(mem1); //직렬화
oos.writeObject(mem2); //직렬화
oos.writeObject(mem3); //직렬화
oos.writeObject(mem4); //직렬화
System.out.println("쓰기 작업 완료...");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//////////////////////////////////////////////////////
ObjectInputStream ois = null;
try {
// 저장한 객체를 읽어와 화면에 출력
ois = new ObjectInputStream(
new FileInputStream("d:/D_Other/memObj.bin"));
Object obj = null;
while((obj = ois.readObject()) != null) {
// 읽어온 데이터를 원래의 객체형으로 변환 후 사용한다.
Member mem = (Member) obj;
System.out.println("이름 : " + mem.getName());
System.out.println("나이 : " + mem.getAge());
System.out.println("주소 : " + mem.getAddr());
System.out.println("---------------------------");
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
} try {
ois.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
|
cs |
2) 회원정보를 담기 위한 VO 클래스
자바는 Serializable 인터페이스를 구현한 클래스만 직렬화 할 수 있도록 제한하고 있음 구현하지 않으면 직렬화 작업시 예외발생함 |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Member implements Serializable {
// 자바는 Serializable 인터페이스를 구현한 클래스만 직렬화 할 수 있도록 제한하고 있음
// 구현하지 않으면 직렬화 작업시 예외발생함.
private String name;
private int age;
private String addr;
public Member(String string, int age, String addr) {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Member [name=" + name + ", age=" + age + ", addr=" + addr + "]";
}
}
|
cs |
'daily > 고급자바' 카테고리의 다른 글
| [고급자바] 람다 (0) | 2023.02.14 |
|---|---|
| [고급자바] IO (4) (0) | 2023.02.14 |
| [고급자바] IO (2) (0) | 2023.02.13 |
| [고급자바] IO (1) (0) | 2023.02.13 |
| [고급자바] Thread(6) (0) | 2023.02.13 |