## 28. 상속을 이용하여 primitive type과 String 출력 기능을 추가하기
- 상속을 이용하여 바이트 입출력 기능을 확장하기
- DataInputStream = FileInputStream 클래스 + primitive type/String 값 읽기
- DataOutputStream = FileOutputStream 클래스 + primitive type/String 값 쓰기
Java 17 api 에 있는 DataOutputStream 클래스를 참고하여 만들어보기
상속을 이용하여 primitive type과 String 출력 기능을 추가하기
상속을 이용하여 바이트 입출력 기능을 확장하기
DataOutputStream = FileOutputStream 클래스 + primitive type/String 값 쓰기
DataOutputStream 클래스 생성
DataOutputStream.java
ㄴ FileOutputStream 클래스를 상속시킴
DataOutputStream.java
ㄴ super 클래스의 생성자 추가
=> 우클릭 > Generate Constructors from Superclass... 선택
ㄴ String 만 생성해줌
DataOutputStream.java
ㄴ writeInt 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 int 값을 쓰는 write 복사해서 this 로 변경)
=> int 값을 쓰기 위한 메서드
App.java
ㄴ FileOutputStream -> bitcamp 패키지에 생성한 DataOutputStream 사용
App.java
ㄴ DataOutputStream 에 생성한 writeInt(int v) 메서드 사용
DataOutputStream.java
ㄴ writeShort 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 Short 값을 쓰는 write 복사해서 this 로 변경)
=> Short 값을 쓰기 위한 메서드
=> java 17 api 참고 시 writeShort 는 int 값을 파라미터로 받는 것을 알 수 있음
App.java
ㄴ DataOutputStream 에 생성한 writeShort(int v) 메서드 사용
DataOutputStream.java
ㄴ writeUTF 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 String 값을 쓰는 write 복사해서 this 로 변경)
=> String 값을 쓰기 위한 메서드
App.java
ㄴ String 값을 쓰는 모든 부분에 DataOutputStream 에 생성한 writeUTF(intv) 메서드 적용
DataOutputStream.java
ㄴ writeChar 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 Char 값을 쓰는 write 복사해서 this 로 변경)
=> Char 값을 쓰기 위한 메서드
=> java 17 api 참고 시 writeChar 는 int 값을 파라미터로 받는 것을 알 수 있음
App.java
ㄴ DataOutputStream 에 생성한 writeChar(int v) 메서드 사용
=> saveItem(), saveBoard() 메서드도 동일하게 변경해주기
saveBoard() 에서의 long 값 처리
DataOutputStream.java
ㄴ saveBoard() 에서는 long 값을 사용하므로 DataOutputStream 클래스에 long 값을 처리해주는 메서드를 추가해야 함
App.java
ㄴ DataOutputStream 에 생성한 writeLong(long v) 메서드 사용
상속을 이용하여 바이트 입출력 기능을 확장하기
DataInputStream = FileInputStream 클래스 + primitive type/String 값 읽기
DataInputStream 클래스 생성
DataInputStream.java
ㄴ String 만 생성해줌
App.java
ㄴ FileOutputStream -> bitcamp 패키지에 생성한 DataInputStream 사용
DataInputStream.java
ㄴ readShort() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)
ㄴ return 값은 short 이므로 (short) 로 형변환(캐스팅)해줘야 함
App.java
ㄴ DataInputStream 클래스에 생성한 readShort() 메서드 사용
DataInputStream.java
ㄴ readInt() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)
App.java
ㄴ int 값 읽는 모든 부분에 DataInputStream 에 생성한 readInt() 메서드 적용
DataInputStream.java
ㄴ readLong() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)
App.java
ㄴ long 값 읽는 부분에 DataInputStream 에 생성한 readLong() 메서드 적용
DataInputStream.java
ㄴ Board 에는 없지만 Member 에는 char 타입이 있으므로 생성해줘야 함
ㄴ readChar() 메서드 생성 (App 클래스에 있는 loadMember() 메서드 내의 코드 활용하여 in -> this 로 변경)
App.java
ㄴ loadMember() 메서드에서 long 값 읽는 부분에 DataInputStream 에 생성한 readChar() 메서드 적용
DataInputStream.java
=>
ㄴ 8192는 일반적으로 사용되는 크기 중 하나이며, 많은 I/O 작업에서 효율적인 크기로 알려져 있습니다.
ㄴ 읽을 데이터의 길이에 따라 동적으로 크기를 할당
=> 필요한 만큼의 메모리만 사용하므로 메모리의 효율성이 높아짐
App.java
ㄴ String 값 읽는 모든 부분에 DataInputStream 에 생성한 readUTF() 메서드 적용
=> saveMember(), saveItem() 메서드도 동일하게 변경해주기