hyeonga_code

Java_64_Stream_Byte 입출력 본문

Java

Java_64_Stream_Byte 입출력

hyeonga 2023. 10. 26. 05:59
반응형


-- Stream_스트림
    - 데이터를 목적지로 입출력하기 위한 방법
    - 지연될 수 있습니다.
        > 1.4 ver NIO : cash memory > 보완
            - channel : cpu와 입출력 장치의 속도 차이를 보완
            - 멈추는 상태를 해결_버퍼를 사용하는 방법입니다.
        > 1.7 ver NIO2
            - NIO를 조금 더 개선한 것
        > Netty
            - network 만들 때 사용하는 framework 입니다.
            - 비동기 통신을 위함입니다.
            - '자바 네트워크 소녀 네티'
    - 1차 스트림
        - 하드웨어와 직접 연결
    - 2차 스트림
        - 1차 스트림과 연결되어 java로 끌어옴

    -- 파일 클래스
        - 디렉토리의 등록 정보를 표현하는 클래스입니다.
        - 실존하지 않아도 생성할 수 있습니다.
        - 생성자
            - File(pathname)
            - File(String parentm child)
            - File(File parend, child)


    -- Byte Stream
        - Input Stream
            - close()
            - read()
            - read(byte[] b)
            - read(byte[], int start, int length)
        - Output Stream
            - close()
            - write(int i)
            - write(byte[] b)
            - write(byte[], int offset, int length)
    -- File
        - 문자 하나씩 
        - 문자열은 byte 배열로 변환시켜서 저장
        - Input Stream
            - FileInputStream(String fileName)
            - FileInputStream(File file)
        - Output Srream
            - FileOutputStream(String fileName)
            - FileOutputStream(String name, boolean append)
                    '문자열'.getByte()

    -- Data
        - 데이터 타입과 포맷을 유지

    
    -- 문자열로 입력하기(/,_로 구분)
        - 하나의 문자열로 받아옵니다.
        - 한 줄당 저장

          - byte 입출력
=====

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
import java.io.*;
 
public class Exam_06 {
    public static void main(String[] args) throws IOException{
        File dir = new File("D:\\03_PM1430_JAVA\\수업내용");
        File file = new File(dir,"aaa.txt");
        
        //파일 출력: 파일의 어떤 내용을 전달
        FileOutputStream fos = new FileOutputStream(file);
        // file 클래스의 실제 값은 없어도 무관
        // 안에 내용이 있어도 다시 덮어 쓰는 기능
 
        FileInputStream fos = new FileOutputStream(file, ture);
        // 들어있는 파일 내용 뒤에 이어 붙여 작성
 
        fos.write('A');
        fos.write(66);
        // 파일 'aaa.txt' 생성, 내용 'AB'
        
        String msg = "\nHello, Java!!";
        
        fos.write(msg.getBytes());
        // 문자열은 Byte 배열로 변환시켜 저장
    }
}



                              - BufferedOutputStream
                              - DataOutputStream
=====

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
import java.io.*;
 
public class Exam_06 {
    public static void main(String[] args) throws IOException{
        File dir = new File("D:\\03_PM1430_JAVA\\수업내용");
        File file = new File(dir,"bbb.txt");
        
        int a = 10;
        String msg = "Hello";
        double b = 10.23;
        
        FileOutputStream fos = new FileOutputStream(file);
        
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 임시로 저장해두기
        // >>>> "@$u혧\(? Hello" 알아볼 수 없음 (컴퓨터만 이해)
        DataOutputStream dos = new DataOutputStream(bos);
        
        dos.writeInt(a);
        dos.writeDouble(b);
        dos.writeUTF(msg);
        dos.close();
        // flush
        
    }
}



                    - 입력
                       - FileInputStream
                                        - 문자 하나씩 가져옴
                                          '파일 이름'.read()
=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.*;
 
public class Exam_06 {
    public static void main(String[] args) throws IOException{
        File dir = new File("D:\\03_PM1430_JAVA\\수업내용");
        File file = new File(dir,"aaa.txt");
        
        //파일 입력: 파일의 어떤 내용을 전달
        FileInputStream fis = new FileInputStream(file);
        // file 클래스의 실제 값 필수
        
        while(true) {
            int res = fis.read();
            // 한 글자 읽어오는 것
            if(res<0break;
            // 파일의 값을 1byte씩 잘라 가져옴
            // 파일의 끝에서 -1을 반봔
            // 아닐 경우 아스키코드값 반환(음수 X) >> EOF
            System.out.println((char)res);
        }
    }
}



                       - BufferInputStream
                       - DataInputStream
=====

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
import java.io.*;
 
public class Exam_06 {
    public static void main(String[] args) throws IOException{
        File dir = new File("D:\\03_PM1430_JAVA\\수업내용");
        File file = new File(dir,"bbb.txt");
        
        
        FileInputStream fis = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(fis);
        DataInputStream dis = new DataInputStream(bis);
        
        int a = dis.readInt();
        double b = dis.readDouble();
        String msg = dis.readUTF();
        
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        System.out.println("msg: " + msg);
        /*
        a: 10
        b: 10.23
        msg: Hello
         */
        // 저장한 파일은 알아볼 수 없지만 컴퓨터로 받아오면 제대로 출력할 수 있음
        // 데이터를 입력한 순서대로 출력해야 데이터를 제대로 꺼내올 수 있음
        // 그렇지 않은 경우 다시는 데이터를 복구할 수 없음
    }
}



 - 성적관리 프로그램에 적용
=====

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package sungjuk;
import java.util.*;
import java.io.*;
 
public class SungJukProImpl implements SungJukPro{
    private ArrayList<SungJuk> list;
    // SungJuk으로 Generic
    private Scanner in;
    private File file; 
 
    public SungJukProImpl() {
        list = new ArrayList<>();
        in = new Scanner(System.in);
        File dir = new File("D:\\03_PM1430_JAVA\\수업내용");
        File file = new File(dir,"sungjuk.txt");
    }
    
    @Override
    public void save() {
        try {
            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            DataOutputStream dos = new DataOutputStream(bos);
            for(SungJuk sj:list) {
                dos.writeUTF(sj.getName());
                dos.writeInt(sj.getKor());
                dos.writeInt(sj.getEng());
                dos.flush();
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void load() {
        try {
            if(file.createNewFile()) {
                System.out.println("No data");
                return;
            }
        }catch(IOException e) {}
        list.clear();
        // 미리 청소
 
        try {
            FileInputStream fis = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(fis);
            DataInputStream dis = new DataInputStream(bis);
            while(true) {
                String name = dis.readUTF();
                int kor = dis.readInt();
                int eng = dis.readInt();
                SungJuk sj = new SungJuk(name, kor, eng);
                list.add(sj);
            }
        }catch(EOFException e) {
            System.out.println("File Upload!");
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void input() {
        System.out.print("이름을 입력 : ");
        String name = in.next();
        System.out.print("국어점수를 입력 : ");
        int kor = in.nextInt();
        System.out.print("영어점수를 입력 : ");
        int eng = in.nextInt();
        SungJuk sj = new SungJuk(name, kor, eng);
        list.add(sj);
    }
    
    protected SungJuk isName(String name) {
        for (SungJuk sj : list) {
            if (sj.getName().equals(name)) {
                return sj;
            }
        }
        return null;
        /*
         * Iterator it = list.iterator(); 
         * while(it.hasNext()) { 
         *      Object obj = it.next();
         *      SungJuk sj = (SungJuk)obj; 
         *      if (sj.getName().equals(name)) { 
         *     return sj; 
         *      } 
         * }
         * return null;
         */
    }
    
    protected void rank() {
        for (SungJuk sj1 : list) {
            sj1.clearRank();
            for (SungJuk sj2 : list) {
                if (sj1.getTot() < sj2.getTot()) {
                    sj1.plusRank();
                }
            }    
        }
    }
 
    @Override
    public void view() {
        rank();
        for(SungJuk sj : list) {
            sj.disp();
        }
        /*
        Iterator it = list.iterator();
        while(it.hasNext()) {
            Object obj = it.next();
            SungJuk sj = (SungJuk)obj;
            sj.disp();
        }
        */
    }
 
    @Override
    public void edit() {
        System.out.print("수정할 회원의 이름 : ");
        String name = in.next();
        SungJuk sj = isName(name);
        if (sj == null) {
            System.out.println(name+"님은 저희 학생이 아닙니다.");
        }else {
            System.out.println("현재 "+name+"님의 국어점수는 " + sj.getKor()+"점 입니다.");
            System.out.print("수정하실 국어점수 : ");
            sj.setKor(in.nextInt());
            System.out.println("현재 "+name+"님의 영어점수는 " + sj.getEng()+"점 입니다.");
            System.out.print("수정하실 영어점수 : ");
            sj.setEng(in.nextInt());
            sj.setTot();
            System.out.println(name+" 학생의 정보를 수정하였습니다.");
        }        
    }
 
    @Override
    public void delete() {
        System.out.print("삭제할 학생의 이름 : ");
        String name = in.next();
        SungJuk sj = isName(name);
        if (sj == null) {
            System.out.println(name+"님은 저희 학생이 아닙니다.");
        }else {
            System.out.println(name+"학생을 삭제합니다.");
            list.remove(sj);
        }
    }
 
    @Override
    public void exit() {
        System.out.println("프로그램을 종료합니다.");
        System.exit(0);        
    }
}

 

반응형

'Java' 카테고리의 다른 글

Java_66_Collection_Set, List, Queue, Map  (0) 2023.10.26
Java_65_Generic_제네릭  (0) 2023.10.26
Java_63_Scanner  (0) 2023.10.25
Java_62_Calendar 클래스, 날짜 클래스  (0) 2023.10.25
Java_61_Math 클래스, Math.random(), 업다운 게임  (0) 2023.10.25