스트림
스트림은 데이터를 원하는 곳으로 보내거나 받기 위한 통로로서 데이터 흐름 또는 데이터를 전송하기 위한 파이프라고 볼 수 있다.
스트림의 종류
스트림은 취급하는 데이터 종류에 따라 바이트 스트림과 문자 스트림으로 구분할 수 있다. 바이트 스트림은 데이터를 8비트로 다루고 문자 스트림은 데이터를 16비트로 다룬다.
스트림의 사용
바이트 스트림과 문자 스트림은 모두 동일한 방식으로 사용할 수 있다. 가장 먼저 스트림을 열고 스트림에서 데이터를 읽은 후에 스트림을 닫으면 된다. 다음 그림은 이러한 과정을 보여준다.
File클래스
File클래스는 파일과 디렉토리에 대한 정보(경로, 이름, 크기 등)를 파악하고 삭제하는 등의 다양한 조작을 지원하는 클래스이다.
1.파일 정보를 얻을 수 있다.
2. 파일과 디렉토리를 생성하거나 삭제할 수 있다.
3. 파일에서 데이터를 읽거나 파일에 데이터를 쓸 수 없다.
File(String pathname)
주어진 pathname을 경로로 하는 파일 객체를 생성한다.
File(File parent, String child)
parent와 경로명 child로 파일 객체를 생성한다.
File(String parent, String child)
주어진 경로명 parent와 child로 파일 객체를 생성한다.
File f1 = new File("c:\\tmp\\test.java");
File f2 = new File("c:\\tmp","test.java");
File 클래스에는 다음과 같이 파일을 읽거나 쓸 수 있는 메소드가 준비되어 있다.
java.io.File 클래스의 주요 메소드
boolean |
canRead() 지정된 파일을 읽을 수 있으면 true, 없으면 false를 반환 |
boolean |
canWrite() 지정된 파일을 기록할 수 있으면 true, 없으면 false를 반환 |
bolean |
createNewFile() 새로운 파일을 자동적으로 생성 |
boolean |
delete() 지정된 파일을 삭제 |
boolean |
equals() 두 File 객체가 같으면 true, 그렇지 않으면 false를 반환 |
String |
getName() 두 File 객체가 같으면 true, 그렇지 않으면 false를 반환 |
String |
getPath() File 객체의 파일 경로를 반환 |
boolean |
isAbsolute() File 객체가 절대 경로명을 참조하면 true, 글허지 않으면 false를 반환 |
boolean |
isDirectory() File 객체가 디렉토리를 참조하면 true, 그렇지 않으면 false를 반환 |
boolean |
isFile() File 객체가 파일을 참조하면 true, 그렇지 않으면 false를 반환 |
boolean |
isHidden() File 객체가 숨겨진 파일이라면 true, 그렇지 않으면 false를 반환 |
long |
length() File 객체가 나타내는 파일 길이를 반환 |
String[] |
list() File객체가 디렉토리를 나타내면 디렉토리 내의 파일들을 String 배열로 반환 |
import java.io.File;
public class Test {
public static void main(String[] args) {
File dir new File("c:" + File.separator + "tmp");
File file = new File(dir, "test.java");
System.out.println("File.separator: " + File.separator);
System.out.println("--------------[tmp]-----------");
System.out.println(("getName() : " + dir.getName());
System.out.println(("getpath() : " + dir.getpath());
System.out.println("isFile() : " + dir.isFile());
System.out.println("isDirectory() : " + dir.isDirectory());
System.out.println("isHidden() : " + dir.canRead());
System.out.println("canWrite() : " + dir.canWrite());
System.out.println("length() : " + dir.length());
System.out.println("--------[tmp\\test.java]------");
System.out.println(("getName() : " + dir.getName());
System.out.println(("getpath() : " + dir.getpath());
System.out.println("isFile() : " + dir.isFile());
System.out.println("isDirectory() : " + dir.isDirectory());
System.out.println("isHidden() : " + dir.canRead());
System.out.println("canWrite() : " + dir.canWrite());
System.out.println("length() : " + dir.length());
직렬화(Serialization
직렬화란 객체를 파일 또는 네트워크를 통하여 송수신하기 위하여 객체를 바이트로 스트림화 하는 것을 말한다. 이를 통해 객체를 입출력 형식에 구애받지 않고 파일에 저장함으로써 영속성을 제공할 수 있고, 객체 자체를 네트워크를 통하여 쉽게 교환할 수 있다.
직렬화는 이전에 살펴본 ObjectOutputStream클래스를 사용해서 수행할 수 잇으며 이를 통해 생성된 객체는 파일에 기록헉나 네트워크를 통해 다른 곳으로 전송할 수 있다. 이 객체는 ObjectInputStream클래스를 사용해서 다시 읽을 수 있다.
1. 객체를 직렬화하면 객체의 상태를 저장할 수 있다.
2. 객체를 직렬화할 때에는 ObjectOutputStream의 readObject()메소드를 호출한다.
3. 직렬화된객체를 읽을 때에는 ObjectInputStream의 readObject()메소드를 호출한다.
4.Serializable 인터페이스를 구현한 객체만 직렬화할 수 있다.
5. 객체가 직렬화되면 그 객체와 연관된 모든 객체가 직렬화된다. 즉, 직렬화된 객체의 인스턴스 변수에 의해서 참조된 객체들도 모두 직렬화되고, 그 객체들에서 참조하는 객체들도 모두 직렬화 된다.
이런식으로 연관된 모든 것들이 직렬화된다. 단,Serializable 인터페이스를 구현한 개체만 직렬화 된다.
6.static 제한자로 선언된 변수는 직렬화 대상이 아니다.
7. 직렬화할 때 어떤 객체를 제외하고 싶다면 transient 키워드를 사용한다. 해당 변수는 나중에 복구될 때 참조형이라면 null이 기본 데이터형이라면 default 값이 할당 된다.
8. 역 직렬화할 때에는 그 JVM에 해당 객체를 저장한 것과 같은 순서로 읽어오게 된다.
직렬화(Serializable) 인터페이스
packge java.io;
public interface Serializable{
}
예제)
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Test{
public static void main(String[] args) throws Exception{
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("test.ser"));
Member im = new Member();
os.writeObject(im);
os.close();
ObjectInputStream oi = new objectInputStream(new FileInputStream("test.ser"));
Object obj = oi.readObject();
oi.close()
Member outm = (Member) obj;
System.out.println(outm.getName());
System.out.println(outm.getId());
System.out.println(outm.getAge());
}
}
class Member implements Serializable{
transient String name = "forcert";
static String id = "kairo";
int age = 20;
public String getName(){
return this.name;
}
public static String getId(){
return id;
}
public static String getId() {
return age;
}
}
'컴퓨터프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - FileInputStream/FileOutputStream 클래스 (0) | 2013.10.11 |
---|---|
JAVA - 입력, 출력 클래스 (0) | 2013.10.11 |
JAVA - java.lang 패키지2 (0) | 2013.10.09 |
JAVA - java.lang 패키지 (0) | 2013.10.08 |
JAVA - 중첩 클래스 (0) | 2013.10.08 |