일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 기초프로그래밍
- CS 기초
- 데이터베이스 모델링
- 알고리즘
- 예외처리
- 모두를 위한 컴퓨터 과학(CS50)
- 모두를 위한 컴퓨터 과학
- edwith
- Compute Science
- 상속
- 객체지향
- CS기초지식
- exception
- til
- 면접을 위한 CS 전공지식 노트
- SW
- ssafy
- ERD
- java
- CS50
- Java Programming
- 삼성청년SW아카데미
- 부스트코스
- SSAFY 9기
- CS 기초지식
- WebProgramming
- 관계형 데이터베이스
- Computer Science
- w3schools
- 이진법
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -17일차 노트 필기_IOStream / 문자 기준 데이터 입출력/ Reader, Writer_220812 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -17일차 노트 필기_IOStream / 문자 기준 데이터 입출력/ Reader, Writer_220812
Joslynn 2022. 8. 12. 16:14Exception 예외 - 자동 리소스 닫기
// 괄호 안에 선언된 변수에 예외 발생시 자동으로 리소스 닫기(close()) 실행
try(변수 선언...){
} catch (Exception e){
}
문자 단위로 파일 읽기 - File Reader → Buffered 이용 - BufferedReader
문자 단위로 파일 쓰기 = FileWriter → Buffered 이용 - BufferedWriter
FileReader의 메소드
: read() → 한 문자를 기준으로 데이터를 읽음
: char 타입의 배열을 인수로 받음
BufferedReader의 메소드
: readLine() // 한 문장 단위로 데이터를 읽음, 데이터를 끝까지 다 읽으면 null을 반환
Writer의 메소드
: write() // 문자열을 바로 인수로 집어넣을 수 있음
모니터 출력: System.out
키보드입력: System.in
기존 방법:
InputStream is = System.in;
is.read(); // 1byte 읽기
// byte 단위를 문자 단위로 변환 필요하다! --- 보조 Stream이 필요
// InputStream ----> Reader ======> InputStreamReader (byte 단위를 문자 단위로 변환)
InputStreamReader ir = new InputStreamReader(System.in);
ir.read(); // 1문자 읽기
// Reader ----> Buffered 이용 ======> BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br. readLine(); // 한줄 읽기
개선 결과: Scanner 객체 // Scanner만 생성하면 내부에서 알아서 위 작업 완료
Scanner sc = new Scanner(System.in);
sc.nextLine();
데이터 저장
1) 변수: 한 가지 타입에 한 가지 값만 저장
단점: 유형이 비슷한 여러 개의 값을 저장할 수 없음
2) 배열: 한 가지 타입에 index를 구분해서 여러 개의 값을 저장
단점: 데이터 조작 불편
3) 자료구조: 여러 가지 타입을 다양하게 저장
데이터 조작도 용이
그러나 1, 2, 3번은 영속성이 제한적임
프로그램이 종료되면, 데이터가 초기화됨
**필요한 정보를 지속적으로 저장할 수는 없을까?
: 결국 IO가 필요 - 파일에 저장 (삭제 전까지는 유지됨)
ex) ~.txt
영희.txt → 나이:주소:연락처:...
split(":");으로 배열로 만들어 일일이 데이터를 꺼내야 함
속성별 분리가 어려움
:하지만, 이 또한 방대한 양의 데이터를 저장하기에는 어려움이 있다.
ex) properties 파일 저장
key=value
age=20
name=영희
addr=서울
...
**자바의 입장에서 보면 정보를 객체로 저장한다.
class Student{
name, age, addr
}
List <Student> list;
: 이처럼, 객체를 파일에 저장할 수 있다면 정보의 영속성을 유지할 수 있다.
: 이러한 부분을 자바에서 가능하도록 만들어 놓음;
: 객체를 그냥 파일에 저장할 수 는 없음, => 객체를 직렬화해서 저장
: 저장하려고 하는 객체를 바이트 바이너리로 일렬로 늘어뜨려서 저장
보조Stream (바이트 단위에서만 처리 가능)]'
: 저장된 파일의 내용을 읽을 때, 역직렬화를 해서 읽음;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class ObjectSaveExam {
public ObjectSaveExam(){
//저장할 객체를 생성
List <Student> list = new ArrayList<Student>();
list.add(new Student("원영", 23, "여수"));
list.add(new Student("소희", 15, "성남"));
list.add(new Student("준형", 28, "부산"));
// 객체를 파일에 저장
try(ObjectOutputStream ops = new ObjectOutputStream(
new FileOutputStream("/**파일 경로*/"))) {
ops.writeObject(list);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ObjectSaveExam();
}
}