보조 스트림(2)
2022. 5. 1. 21:19ㆍjava/java
* 기본 타입 입출력 보조 스트림
DataInputStream dis = new DataInputStream(바이트입력스트림); //생성자에 바이트입력스트림 입력할 것
DataOutputStream dos = new DataOutputStream(바이트출력스트림);
DataInputStream, DataOutputStream
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataInputOUputStreamExample {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:/Temp/primitive.dat");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("홍길동"); //기본형은 아니지만 문자열은 writeUTF()메서드르 쓴다
dos.writeDouble(95.5);
dos.writeInt(2);
dos.flush(); dos.close(); fos.close();
FileInputStream fis = new FileInputStream("C:/Temp/primitive.dat");
DataInputStream dis = new DataInputStream(fis);
String name = dis.readUTF(); //출력했던 순서대로 읽어야 한다.
double score = dis.readDouble();
int order = dis.readInt();
System.out.println(name + " : " + score + " : " + order);
dis.close(); fis.close();
}
}
*프린터 보조 스트림
PrintStream ps = new PrintStream(바이트출력스트림);
PrintWriter pw = new PrintWriter(문자출력스트림);
*객체 입출력 보조 스트림
1) 객체를 파일 또는 네트워크로 입출력할 수 있는 기능 제공
2) ObjectInputStream, ObjectOutputStream
(바이트 배열을 객체로 만드는 작업 - 역직렬화) (객체를 바이트 배열로 만드는 작업 - 직렬화)
ObjectInputStream ois = new ObjectInputStream(바이트입력스트림);
ObjectOutputStream oos = new ObjectOutputStream(바이트출력스트림);
oos.writeObject(객체);
객체타입 변수 = (객체타입) ois.readObject();
3) 직렬화가 가능한 클래스(Serializable)
- 자바는 Serializable 인터페이스를 구현한 크랠스만 직렬화할 수 있도록 제한
4) serialVersionUID 필드
- 직렬화된 객체를 역질렬화할 때는 직렬화 했을 때와 같은 클래스를 사용
- 클래스의 이름이 같더라도 클래스의 내용이 변경된 경우 역질렬화는 실패
- serialVersionUID는 같은 클래스임을 알려주는 식별자 역할
(Serializable) 인터페이스가 구현되면 컴파일시에 자동적으로 serialVersionUID 정적 필드가 추가됨
- 불가피한 수정이 있을 경우 명시적으로 serialVersionUID를 선언
static final long serialVersionUID = 정수값;