* Data[Input/Output]Stream을 브릿지 클래스로 넣어 자바의 자료형에 맞게 입출력을 할 수 있다
파일 출력(데이터 저장)
: 자바 기본 자료형 변수 선언(int, double, byte, char ,,,) -> DataOutputStream -> FileOutputStream
import java.io.*;
//자바의 자료형에 맞게 데이터를 파일에 저장
//DataOutputStream를 거쳐서 파일을 생성하지 않으면 모든 정보가 string으로 저장된다
public class DataOutputTest {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//파일로 저장
FileOutputStream fos = new FileOutputStream("c:/webtest/3.java/data.txt");
//자바의 자료형에 맞게 포장
DataOutputStream dos = new DataOutputStream(fos);
//메모리에 자료형에 맞게 저장
char kim='김'; //0~65535
System.out.println((int)Kim);
byte b=10;
String str="ab\n";
byte ba[]= {65,66,67};//A,B,C
//파일로 저장-> write자료형(저장할값);
dos.writeChar(kim);//<->readChar()
dos.writeByte(b);
dos.writeBytes(str);//writeString 아님!(주의)
dos.write(ba);//ABC배열의 값을 매개변수로 받아서 출력
dos.close();
fos.close();
}
}
/*
c:/webtest/3.java/
위치에 data.txt 파일 생성됨
*/
파일 읽어오기(데이터 읽어오기)
: FileInputStream -> DataInputStream -> 메모리에 올리고 -> 콘솔에 출력
import java.io.*;
//읽어들이는 부분
public class DataOutputTest2 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//만들어진 파일의 내용을 다시 읽어들여서 확인 후 출력하기(자료형 제대로 저장됐는지 확인)
DataInputStream dis = new DataInputStream(new FileInputStream("c:/webtest/3.java/data.txt"));
//변수=dis.read자료형()<->dos.write자료형
//굳이 변수 지정해서 뽑지 않아도 되지만 하나씩 값 확인하기 위함
char c = dis.readChar();//'한'
byte b1 = dis.readByte();
String s = dis.readLine();//앞으로 쓰지말라는 경고로 짝대기 그어짐
byte bb[]=new byte[3];//65,66,67
dis.read(bb);//read(읽어들여서 저장할 byte배열을 매개변수로 넣어줌)
dis.close();
//변수에 있는 값을 그대로 뽑기-> println
System.out.println("c=>"+c);
System.out.println("b1=>"+b1);
System.out.println("s=>"+s);
System.out.println("bb=>"+new String(bb));
//byte[]={65,66,67}=> 이걸 string으로 바꿔서 출력해야함(A,B,C)
//String 클래스의 생성자를 통해서 byte배열을 String으로 변환할 수 있다
}
}
객체형에 맞게 데이터를 입출력
객체를 파일로 출력
직렬화: 컴퓨터 메모리에 저장된 객체 -> (ObjectOutputStream) -> usb(파일로 저장)
파일 읽어오기
역직렬화 : 파일에 저장된 객체의 저장정보 -> (ObjectInputStream) -> 컴퓨터 메모리에 로딩
*모든 클래스의 객체가 전부 파일로 저장되지는 않음-> 객체직렬화가 가능한 클래스로 만들어줘야한다(메모리에 저장된 객체 중 파일로 저장이 가능한 클래스)-> class 클래스명 implements Serializable
import java.io.*;
class Person implements Serializable{
String name;
int age;
transient String addr;
//transient 멤버변수=> 이 멤버변수만 파일에 저장하지 않겠다는 의미
}
public class ObjectTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Person p = new Person();
p.name="김";
p.age=20;
p.addr="서울";
/*파일로 저장*/
FileOutputStream fos = new FileOutputStream("c:/webtest/3.java/object.txt");
//자바에서 파일 경로를 쓸때 \는 식별하지 못한다-> \\ 혹은 /로 써야함
/*자바의 객체에 맞게 포장*/
ObjectOutputStream oos = new ObjectOutputStream(fos);
//형식) writeObject(저장할객체명) <-> readObject
//writeObject의 저장할객체명이 obj인 이유?->모든 객체가 다 저장 가능하게 만들기 위함
oos.writeObject(p);//Person->Object으로 변환되어 저장
oos.close();
fos.close();
//만들어진 파일의 내용을 다시 읽어들여서 확인 후 출력
ObjectInputStream ois = new ObjectInputStream
(new FileInputStream("c:/webtest/3.java/object.txt"));
//usb로 옮겨 집에 있는 컴퓨터에 연결-> readObject()은 object이므로
//다시 꺼내올때는 원래의 객체로 명시적인 형변환이 필요하다
Person p2 = (Person)ois.readObject();
System.out.println("이름="+p2.name+",나이="+p2.age+",주소="+p2.addr);
}
}
/*
이름=김,나이=20,주소=null
*/
인터페이스 종류
1. Marker Interface
기능을 표시해주는 인터페이스
ex) 직렬화 목적으로 만들어진 인터페이스(Serializable) -> 추상메소드 없음
2. 설계목적으로 만들어진 인터페이스
추상메소드가 있어, 구현해야 된다는 통일성, 강제성을 부여함
3. Swing에서 이벤트처리할때 사용
ex) WindowListener, ActionListener
'JAVA' 카테고리의 다른 글
[JAVA]컬렉션 프레임워크 개요, wrapper 클래스 boxing unboxing (0) | 2021.06.20 |
---|---|
[JAVA]Enumeration, Iterator 인터페이스 (0) | 2021.06.19 |
[JAVA]Scanner클래스 nextLine() next() / 예외처리 (0) | 2021.06.17 |
[JAVA] Swing -JTextField, JTextArea (0) | 2021.06.08 |
[JAVA]형변환 기본형변환 객체형변환/ instanceof 연산자 (0) | 2021.02.02 |