์ ์ถ๋ ฅ ์คํธ๋ฆผ
โข
์
์ถ๋ ฅ ์คํธ๋ฆผ(IO Stream)
โฆ
๋ฐ์ดํธ ์คํธ๋ฆผ (Byte Stream)
โฆ
๋ฌธ์ ์คํธ๋ฆผ (Character Stream)
โข
ํ์ค ์
์ถ๋ ฅ (Standard I/O)
โข
ํ์ผ ์
์ถ๋ ฅ
โฆ
FileInputStream
โฆ
FileOutputStream
โฆ
File
โข
์ง๋ ฌํ (Serialization)
โฆ
SerialVersionUID
์ ์ถ๋ ฅ ์คํธ๋ฆผ(IO Stream)
๋ฐ์ดํฐ์ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ์ ํ๋ฆ์ ๋ค๋ฅด๋ ๊ฐ๋
โข
๋ฐ์ดํธ ์คํธ๋ฆผ (Byte Stream)
โข
๋ฌธ์ ์คํธ๋ฆผ (Character Stream)
์คํธ๋ฆผ(Stream)
: โํ๋ฆโ
๋ฌผ๋ฆฌ์ ๋๋ ๊ฐ์์ ์ฅ์น๋ก๋ถํฐ ๋ฐ์ดํฐ๊ฐ ํ๋ฌ๊ฐ๋ ํต๋ก
ํ๋ก๊ทธ๋จ(SW) ์ปดํจํฐ(HW) ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋ฆ
๋ฐ์ดํธ ์คํธ๋ฆผ (Byte Stream)
๋ฐ์ดํฐ๋ฅผ Byte ๋จ์๋ก ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ํ๋ฆ
ํด๋์ค | ์ค๋ช
|
InputStream | ๋ฐ์ดํธ ์
๋ ฅ ์คํธ๋ฆผ์ ์ํ ์ถ์ ํด๋์ค. |
FileInputStream | ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ์ด๋ค์ด๊ธฐ ์ํด ์ฌ์ฉ. |
BufferedInputStream | ์
๋ ฅ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ด๋ถ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํธ ์
๋ ฅ ์คํธ๋ฆผ. |
DataInputStream | ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
(int, char ๋ฑ)์ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก๋ถํฐ ์ฝ๊ธฐ ์ํด ์ฌ์ฉ. |
OutputStream | ๋ฐ์ดํธ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ํ ์ถ์ ํด๋์ค. |
FileOutputStream | ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฐ๊ธฐ ์ํด ์ฌ์ฉ. |
BufferedOutputStream | ์ถ๋ ฅ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ด๋ถ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํธ ์ถ๋ ฅ ์คํธ๋ฆผ. |
DataOutputStream | ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
(int, char ๋ฑ)์ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ฉ. |
๋ฌธ์ ์คํธ๋ฆผ (Character Stream)
๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ๋จ์๋ก ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ํ๋ฆ
ํด๋์ค | ์ค๋ช
|
Reader | ๋ฌธ์ ์
๋ ฅ ์คํธ๋ฆผ์ ์ํ ์ถ์ ํด๋์ค. |
FileReader | ํ์ผ๋ก๋ถํฐ ๋ฌธ์๋ฅผ ์ฝ์ ๋ ์ฌ์ฉ. |
BufferedReader | ์
๋ ฅ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ด๋ถ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์
๋ ฅ ์คํธ๋ฆผ. |
InputStreamReader | ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฌธ์ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๊ธฐ ์ํด ์ฌ์ฉ. |
Writer | ๋ฌธ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ํ ์ถ์ ํด๋์ค. |
FileWriter | ํ์ผ์ ๋ฌธ์๋ฅผ ์ธ ๋ ์ฌ์ฉ. |
BufferedWriter | ์ถ๋ ฅ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ด๋ถ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์ถ๋ ฅ ์คํธ๋ฆผ. |
OutputStreamWriter | ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฌธ์ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๊ธฐ ์ํด ์ฌ์ฉ. |
ํ์ค ์ ์ถ๋ ฅ (Standard I/O)
ํค๋ณด๋๋ฅผ ํตํด ์
๋ ฅ๋ฐ๊ณ , ๋ชจ๋ํฐ์ ์ถ๋ ฅํ๋ ๊ธฐ๋ณธ์ ์ ์
์ถ๋ ฅ
ํ์ค ์คํธ๋ฆผ | ์ค๋ช
| ํ์
|
ํ์ค ์
๋ ฅ
(System.in) | ๊ธฐ๋ณธ์ ์ผ๋ก InputStream ํ์
์
๋๋ค. Scanner ๋๋ InputStreamReader๋ฅผ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค. | InputStream |
ํ์ค ์ถ๋ ฅ
(System.out) | ๊ธฐ๋ณธ์ ์ผ๋ก PrintStream ํ์
์
๋๋ค. | PrintStream |
ํ์ค ์ค๋ฅ
(System.err) | ๊ธฐ๋ณธ์ ์ผ๋ก PrintStream ํ์
์ผ๋ก, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. | PrintStream |
ํ์ค ์ ๋ ฅ ์์์ฝ๋
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine(); // ์ฌ์ฉ์๋ก๋ถํฐ ํ ์ค ์
๋ ฅ ๋ฐ๊ธฐ
Java
๋ณต์ฌ
ํ์ค ์ถ๋ ฅ ์์์ฝ๋
System.out.println("Aloha, World~!");
Java
๋ณต์ฌ
ํ์ผ ์ ์ถ๋ ฅ
File ํด๋์ค์ ํจ๊ป ํ์ผ ์์คํ
์์ ํ๋ก๊ทธ๋จ์ผ๋ก ํ์ผ์ ์
๋ ฅ๋ฐ๊ณ , ๋ฐ๋๋ก ํ๋ก๊ทธ๋จ์์ ํ์ผ ์์คํ
์ ํ์ผ์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ
FileInputStream, FileOutputStream, FileReader, FileWriter ๋ฑ์ด ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
FileInputStream
ํ์ผ์ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์
๋ ฅํ๋ ํด๋์ค
FileInputStream ์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
| ๋ฐํ ํ์
|
int read() | ํ์ผ์์ ๋ค์ ๋ฐ์ดํธ๋ฅผ ์ฝ์ด ๋ฐํํฉ๋๋ค. ๋ ์ด์ ์ฝ์ ๋ฐ์ดํธ๊ฐ ์์ผ๋ฉด -1์ ๋ฐํํฉ๋๋ค. | int |
int read(byte[] b) | ์ฃผ์ด์ง ๋ฐ์ดํธ ๋ฐฐ์ด์ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์
๋๋ค. ๋ฐํ๊ฐ์ ์ฝ์ ๋ฐ์ดํธ ์์
๋๋ค. | int |
void close() | ์คํธ๋ฆผ์ ๋ซ์ ํ์ผ์ ํด์ ํฉ๋๋ค. | void |
long skip(long n) | ํ์ผ์ ํ์ฌ ์์น์์ n ๋ฐ์ดํธ๋ฅผ ๊ฑด๋๋๋๋ค. | long |
int available() | ํ์ฌ ์ฝ์ ์ ์๋ ๋ฐ์ดํธ ์๋ฅผ ๋ฐํํฉ๋๋ค. | int |
FileOutputStream
ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฐ๊ธฐ ์ํ ํด๋์ค
FileOutputStream ์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
| ๋ฐํ ํ์
|
void write(int b) | ์ง์ ๋ ๋ฐ์ดํธ๋ฅผ ํ์ผ์ ์๋๋ค. | void |
void write(byte[] b) | ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์๋๋ค. | void |
void write(byte[] b, int off, int len) | ๋ฐ์ดํธ ๋ฐฐ์ด์ ํน์ ๋ถ๋ถ์ ํ์ผ์ ์๋๋ค.
off๋ ์์ ์ธ๋ฑ์ค, len์ ๊ธธ์ด์
๋๋ค. | void |
void close() | ์คํธ๋ฆผ์ ๋ซ์ ํ์ผ์ ํด์ ํฉ๋๋ค. | void |
void flush() | ์คํธ๋ฆผ์ ๋ฒํผ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ก ํ์ผ์ ์๋๋ค. | void |
File
ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ํด๋์ค
โข
File ๊ฐ์ฒด๋ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ฉฐ, ํ์ผ์ ์์ฑ, ์ญ์ , ํ์ธ, ํ์ผ ์์ฑ ์ฝ๊ธฐ ๋ฑ์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
โข
ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ File ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์คํธ๋ฆผ์ ์ด์ด ์ํํฉ๋๋ค.
โข
File ํด๋์ค ์์ฒด๋ก๋ ํ์ผ์ ๋ด์ฉ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ํ์ผ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ฑฐ๋, ๋๋ ํ ๋ฆฌ๋ฅผ ๋์ดํ๋ ๋ฑ์ ์์
์ ์ฌ์ฉ๋ฉ๋๋ค.
File file = new File("ํ์ผ๊ฒฝ๋ก");
Java
๋ณต์ฌ
File file = new File("ํ์ผ๊ฒฝ๋ก", "ํ์ผ๋ช
");
Java
๋ณต์ฌ
์ง๋ ฌํ (Serialization)
๊ฐ์ฒด๋ฅผ ์คํธ๋ฆผ์ ํตํด ์ ์กํ๊ฑฐ๋ ํ์ผ๋ก ์ ์ฅ ์ํด ๋ฐ์ดํธ ํํ๋ก ๋ณํํ๋ ๊ณผ์
์ง๋ ฌํ ์์์ฝ๋
โข
Person.java
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
Java
๋ณต์ฌ
โข
SerializePerson.java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Scanner;
public class SerializePerson {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ ๋ฐ๊ธฐ
System.out.print("Enter name: ");
String name = scanner.nextLine();
System.out.print("Enter age: ");
int age = scanner.nextInt();
// Person ๊ฐ์ฒด ์์ฑ
Person person = new Person(name, age);
// ํ์ผ์ ์ง๋ ฌํ
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Person.dat"))) {
oos.writeObject(person);
System.out.println("Person object has been serialized and saved to Person.dat");
} catch (IOException e) {
e.printStackTrace();
} finally {
scanner.close();
}
}
}
Java
๋ณต์ฌ
์ญ์ง๋ ฌํ ์์์ฝ๋
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializePerson {
public static void main(String[] args) {
// ํ์ผ์์ ์ญ์ง๋ ฌํ
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Person.dat"))) {
Person person = (Person) ois.readObject();
System.out.println("Person object has been deserialized: " + person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Java
๋ณต์ฌ
SerialVersionUID
ํด๋์ค์ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์, ์ด๋ฏธ ์ง๋ ฌํ๋ ๊ฐ์ฒด์ ํด๋์ค๊ฐ์ ํธํ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํ ์๋ณ์
ํด๋์ค์ ๋ณ์๋ ๋ฉ์๋ ๋ณ๊ฒฝ ์, serialVersionUID ๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค.
๋ฒ์ ๋ณ๊ฒฝ ์์ด, ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ญ์ง๋ ฌํ ์, InvalidClassException์ด ๋ฐ์ํ ์ ์๋ค.
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L; // ๊ณ ์ ์๋ณ์
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter, Setter, toString() ๋ฑ ํ์ํ ๋ฉ์๋๋ค
}
Java
๋ณต์ฌ
๋ณ๊ฒฝ ์
private static final long serialVersionUID = 1L;
Java
๋ณต์ฌ
โข
๋ณ์ ์ถ๊ฐ
private String name;
private int age;
private String address;
Java
๋ณต์ฌ
๋ณ๊ฒฝ ํ
private static final long serialVersionUID = 2L;
Java
๋ณต์ฌ
์๋ฆฌ์ผ๋ฒ์ UID ๋ฅผ ๋ฐ๊พธ์ด์ฃผ์๋ค.