Home 7/26 JAVA 강의
Post
Cancel

7/26 JAVA 강의

7월 26일 (수) 자바 개념 정리 - Stream, Reader/Writer


Java : File IO

입출력 끝단 = node 노드를 연결하고 데이터를 전송할 수 있는 개념 = stream (단방향)

byte : XXStream (class, image, …) char : XXer (txt)

getAbsolutePath() : 있는 그대로 getCanonicalPath() : .. 같은 문자 처리해서 나온 결과

current path : 프로그램 실행 경로

resource를 가져와서 읽을 때는 src 폴더를 사용할 수 없다. src까지 배포하지 않아서 classpath 기준으로 가져오자

nodestream은 보조스트림(부가 기능)과 같이 쓰이는 경우가 많다 노드스트림 : 단순한 byte, char의 전달

보조스트림의 close() 수행 시 노드스트림까지 반환

사용할 스트림의 결정 과정

노드가 무엇인가? 타입은 바이트인가 문자열인가? 방향은 무엇인가? 추가 기능이 필요한가? - 보조스트림 영화 파일을 빠른 속도로 이동시키고 싶다면? File - byte - {Read, Write} => FileInputStream, FileOutputStream + BufferedInputStream, BufferedOutputStream

키보드에서 유니코드 문자를 안전하고 빠르게 읽고 싶다면? Keyboard - byte - Read - InputStream, System.in - InputStreamReader - BufferedReader

메모리 객체를 파일로 저장하고 싶다면? File - byte - Write - FileOutputStream - ObjectOutputStream

class version 관리 serialVersionUID 직렬화 => ObjectOutputStream(), writeObject() & ObjectInputStream(), readObject()

serialVersionUID를 유지하면 클래스가 바뀌어도 InvalidClassException을 안띄울 수 있음

에러 객체는 버퍼링을 안해서 out 객체의 출력보다 더 먼저 나올 수 있다

eclipse 콘솔 같은 경우 err, out 출력에 lock이 걸리지 않아 thread 동시성 문제로 출력 순서가 제대로 나오지 않는다

서버 클라이언트 사이에 주고 받는 데이터를 직렬화하지 않으면 java.io.NotSerializableException이 발생한다.

Serializable 인터페이스 구현하기

Server 쪽에서 Client에게 필요한 라이브러리를 묶어서 보냄 메시지를 주고 받기 위해서는 서버 클라이언트에 같은 메시지 템플릿이 필요하다 => 객체 복원 시 필요

소켓은 서버, 클라이언트가 계속 연결되어 있어야 하므로 너무 많은 사용자를 감당 불가능 => 다중 사용자의 경우, 연결을 빠르게 수립하고 끊는 http를 사용한다.

main 스레드 하나인데, err, out 쪽으로 가서 thread의 락처리가 다르게 되어있어서 출력 순서가 꼬인다.

Thread run() : 실행내역 start() : 개시 stop() : 중단 suspend() : 잠정 중단 yield() : 양보 (실행 시간이 남아도 다시 대기 상태로) join() : 진정한 양보 sleep() : 특정 시간 동안 정지 및 경쟁 포기 resume() : suspend() 되어있는 모든 thread를 깨운다

start() => 대기 상태

pc register에 마지막 수행한 라인을 기억해놓는다

공유 자원에 대한 write를 하려면 키를 쥐고 있는 스레드만 사용가능하고 다른 건 올 스탑 => 공유 자원에 접근하는 코드를 최대한 줄인다. (synchronized 블락의 크기를 줄인다.)

클래스의 멤버 함수에 synchronized 키워드를 사용하면 클래스 객체에 lock이 걸리므로, 그 객체를 사용하는 모든 스레드가 해당 스레드를 제외하고 모두 멈추게 되므로 함수에 synchronized 키워드를 사용하지 않는다.

This post is licensed under CC BY 4.0 by the author.