์ ์ถ๋ ฅ(I/O)?
- Input๊ณผ Output์ ์ฝ์
- ์ปดํจํฐ ๋ด๋ถ ๋๋ ์ธ๋ถ ์ฅ์น์ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ
- ์ฅ์น์ ์ ์ถ๋ ฅ์ ์ํด์๋ ํ๋์จ์ด ์ฅ์น์ ์ง์ ์ ๊ทผ์ด ํ์ํ๋ฐ ๋ค์ํ ๋งค์ฒด์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๊ณตํต์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์คํธ๋ฆผ์ ์ด์ฉํจ.
์คํธ๋ฆผ
- ์๋ฐ์์๋ ํ์ผ์ด๋ ์ฝ์์ ์ ์ถ๋ ฅ์ ์ง์ ๋ค๋ฃจ์ง ์๊ณ , ์คํธ๋ฆผ์ด๋ผ๋ ํ๋ฆ์ ํตํด ์ ์ด
- ์ค์ ์ ์ ๋ ฅ์ด๋ ์ถ๋ ฅ์ด ํํ๋ ๋ฐ์ดํฐ์ ์ด์ํ๋ ํ๋ฆ
- ์ฆ, ์คํธ๋ฆผ์ ์ด์์ฒด์ ์ ์ํด ์์ฑ๋๋ ๊ฐ์์ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ค๊ฐ ๋งค๊ฐ์ ์ญํ ์ ํจ
์คํธ๋ฆผ ํน์ง
- FIFO๊ตฌ์กฐ
๐ถ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ํํ๋ก ๋ฐ์ดํฐ์ ์์๊ฐ ๋ฐ๋์ง ์๋๋ค - ๋จ๋ฐฉํฅ
๐ถ ํ๋์ ์คํธ๋ฆผ์์ ์ ์ถ๋ ฅ์ด ๋์์ ์ด๋ฃจ์ด ์ง์ง ์๋๋ค ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๊ฐ๊ฐ ์คํธ๋ฆผ์ ์ด์ด ์ฌ์ฉํด์ผ ํ๋ค. - ์ง์ฐ ๊ฐ๋ฅ
๐ถ ์คํธ๋ฆผ ๋ด์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ ์ก๋๊ธฐ ์ ๊น์ง ํ๋ก๊ทธ๋จ์ด ์ง์ฐ ์ํ์ ๋น ์ง ์ ์๋ค.
์คํธ๋ฆผ ๋ถ๋ฅ
์ฉ๋์ ์ํ ๋ถ๋ฅ
- 1์ฐจ ์คํธ๋ฆผ : ๋๋ฐ์ด์ค์ ์ง์ ์ฐ๊ฒฐ๋๋ ์คํธ๋ฆผ
- 2์ฐจ ์คํธ๋ฆผ : 1์ฐจ ์คํธ๋ฆผ๊ณผ ์ฐ๊ฒฐ์ ํตํด ๋๋ฐ์ด์ค์ ์ฐ๊ฒฐ๋๋ ์คํธ๋ฆผ
์ ์ก ๋ฐฉํฅ์ ์ํ ๋ถ๋ฅ
- ์ ๋ ฅ ์คํธ๋ฆผ : ๋๋ฐ์ด์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์คํธ๋ฆผ
- ์ถ๋ ฅ ์คํธ๋ฆผ : ๋๋ฐ์ด์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ์คํธ๋ฆผ
์ ์ก๋จ์์ ์ํ ๋ถ๋ฅ
- ๋ฐ์ดํธ ์คํธ๋ฆผ : 1 Byte ๋จ์๋ก ์ ๋ ฅ, ์ถ๋ ฅํ๋ ์คํธ๋ฆผ
- ๋ฌธ์ ์คํธ๋ฆผ : ํ ๋ฌธ์(2 Byte) ๋จ์๋ก ์ ๋ ฅ, ์ถ๋ ฅํ๋ ์คํธ๋ฆผ
๋ณด์กฐ ์คํธ๋ฆผ
- ์คํธ๋ฆผ์ ๊ธฐ๋ฅ์ ํฅ์์ํค๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ์ํค๋ฉฐ, ์ง์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ ํ ์ ์๋ค.
๋ฐ์ดํธ ์คํธ๋ฆผ
- ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ดํฐ ์ ์ก (์ฑ๋ฅ์ ์ฐ์ํ๋ ํ์ผ๋ก ์ ์ฅ์ ๊ฒฐ๊ณผ ํ์ธ ๋ถ๊ฐํจ)
- ํ์ผ(๋์์, ์ด๋ฏธ์ง, ์์ )์ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉ
- ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ต์์ ํด๋์ค๋ InputStream, OutputStream
๋ฐ์ดํธ ์ถ๋ ฅ ์คํธ๋ฆผ : OutputStream
- ๋ฐ์ดํธ ๊ธฐ๋ฐ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ต์์ ํด๋์ค, ์ถ์ ํด๋์ค
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Main {
public static void main(String[] args) throws IOException {
OutputStream os = new FileOutputStream("test.bin");
byte[] array = {10,20,30,40,50};
os.write(array, 1, 4); // ๋ฐฐ์ด ์ธ๋ฑ์ค 1๋ถํฐ 4๊ฐ ์ถ๋ ฅ
os.flush(); // write() ์ดํ ๋ฐ๋์ ๋ฒํผ๋ฅผ ๋น์ฐ๋ ๋์์ด ํ์ !!
os.close(); // ์์ ๋ฐ๋ฉ ๋ฐ ์คํธ๋ฆผ ๋ซ๊ธฐ
}
}
- write(int a, int b) : ๋ฐฐ์ด ์ธ๋ฑ์ค a๋ถํฐ b๊ฐ ์ถ๋ ฅ
- โญ flush() : ๋ฒํผ ๋น์. write() ์ดํ ๋ฐ๋์ ๋ฒํผ ๋น์์ผ ํจ
- โญ close() : ์คํธ๋ฆผ ๋ซ๊ธฐ(์์ ๋ฐ๋ฉ)
๋ฐ์ดํธ ์ ๋ ฅ ์คํธ๋ฆผ : InputStream
- ๋ฐ์ดํธ ๊ธฐ๋ฐ ์ ๋ ฅ ์คํธ๋ฆผ์ ์ต์์ ํด๋์ค, ์ถ์ ํด๋์ค
1๋ฐ์ดํธ์ฉ ์ฝ๊ธฐ
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("test.bin");
byte[] buffer = new byte[100];
while(true) {
int data = is.read(); // 1๋ฐ์ดํธ์ฉ ์ฝ๊ธฐ
if(data == -1) break; // ํ์ผ์ ๋์ ๋๋ฌ
System.out.print(data + " ");
}
is.close();
}
}
20 30 40 50
1๋ฐ์ดํธ์ฉ ์ฝ๊ธฐ ๋๋ฌธ์ ํ์ผ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ, ๊ต์ฅํ ๋นํจ์จ์ ์.
๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ์ฝ๊ธฐ
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("test.bin");
byte[] buffer = new byte[100];
while(true) {
int readByteNum = is.read(buffer); // ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ buffer์ ๊ฐ์ ๋ด์
if(readByteNum == -1) break;
for(int i = 0; i < readByteNum; i++) {
System.out.print(buffer[i] + " ");
}
is.close(); // ์ฝ๊ธฐ ์ํด ์ด์ด๋ ์คํธ๋ฆผ ๋ซ์(๋ฉ๋ชจ๋ฆฌ์ ์์ ๋ฐ๋ฉ)
}
}
byte[]์ ์์ฑํ๊ณ ๊ทธ ํฌ๊ธฐ๋งํผ read()์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ์ฌ int readByteNum์ ๋ด๋๋ค.
int readByteNum์ ๋ฐฐ์ด์ ๋ช ๊ฐ ์๋ชจํ๋์ง๋ฅผ ์ฒดํฌํ๋ ์ฉ๋์ด๋ฉฐ, ์ํฌ๋ฆฌ ๊ณต๊ฐ๊น์ง ๋ด๊ณ while๋ฌธ ํ์ถ
๋ฌธ์ ์คํธ๋ฆผ
Writer
- ๋ฌธ์์ด ๊ธฐ๋ฐ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ต์์ ํด๋์ค, ์ถ์ ํด๋์ค
write(int c) ๋ฉ์๋
public static void main(String[] args) throws Exception {
Writer writer = new FileWriter("test.txt");
char[] data = "๊ณฐ๋์ด์ฌ์ก์ฌ".toCharArray();
for(int i=0; i<data.length; i++) {
writer.write(data[i]);
}
writer.flush();
writer.close();
}
write(char[] c) ๋ฉ์๋
public static void main(String[] args) throws Exception {
Writer writer = new FileWriter("test.txt");
char[] data = "๊ณฐ๋์ด์ฌ์ก์ฌ".toCharArray();
writer.write(data);
writer.flush();
writer.close();
}
write(char[] c, int off, int len) ๋ฉ์๋
public static void main(String[] args) throws Exception {
Writer writer = new FileWriter("test.txt");
//char[] data = "๊ณฐ๋์ด์ฌ์ก์ฌ".toCharArray();
String data = "๊ณฐ๋์ด์ฌ์ก์ฌ";
writer.write(data, 1, 2);
writer.flush();
writer.close();
}
Reader
- ๋ฌธ์ ๊ธฐ๋ฐ ์ ๋ ฅ ์ต์์ ํด๋์ค, ์ถ์ ํด๋์ค
read()
- ์ ๋ ฅ ์คํธ๋ฆผ์ผ๋ก ๋ถํฐ ํ ๊ฐ์ ๋ฌธ์(2๋ฐ์ดํธ)๋ฅผ ์ฝ๊ณ 4๋ฐ์ดํธ(int)๋ก ๋ฆฌํด ํฉ๋๋ค.
- read() ๋ฉ์๋๊ฐ ๋ฆฌํดํ int ๊ฐ์ charํ์ผ๋ก ๋ณํํ๋ฉด ์ฝ์ ๋ฌธ์์ด ํ์ธ ๊ฐ๋ฅ
public static void main(String[] args) throws Exception {
Reader reader = new FileReader("src/test.txt");
int readData;
while( true ) {
readData = reader.read();
if(readData == -1) break;
System.out.print((char)readData);
}
reader.close();
}
read(char[] cbuf) ๋ฉ์๋
์ ๋ ฅ์คํธ๋ฆผ์ผ๋ก ๋ถํฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๋ฌธ์๋ฅผ ์ฝ๊ณ ๋ฐฐ์ด์ ์ ์ฅ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฝ์ ๋ฌธ์ ์๋ฅผ ๋ฆฌํด ํฉ๋๋ค. ์ค์ ๋ก ์ฝ์ ๋ฌธ์ ์๊ฐ ๋ฐฐ์ด ๊ธธ์ด ๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ฝ์ ์๋งํผ๋ง ๋ฆฌํด ํฉ๋๋ค.
public static void main(String[] args) throws Exception {
Reader reader = new FileReader("src/test.txt");
int readCharNo;
char[] cbuf = new char[10];
String data = "";
while( true ) {
readCharNo = reader.read(cbuf);
if(readCharNo == -1) break;
data += new String(cbuf, 0, readCharNo);
}
System.out.println(data);
reader.close();
}
ํ์ผ ์ ์ถ๋ ฅ
File ํด๋์ค
- ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ์ํํ ํด๋์ค, ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ์ถ๋ ฅ ๋์
File file = new File("C:\\Temp\\file.txt");
File file = new File("C:/Temp/file.txt");
public static void main(String[] args) throws URISyntaxException, IOException {
File temp = new File("src");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
File[] contents = temp.listFiles();
System.out.println("๋ ์ง ์๊ฐ ํํ ํฌ๊ธฐ ์ด๋ฆ");
System.out.println("-------------------------------------------------------------------");
for(File file : contents) {
System.out.print(sdf.format(new Date(file.lastModified()))); // ํ์ผ์ ์ต์ข
๊ฐฑ์ ์๊ฐ
if(file.isDirectory()) {
System.out.print("\t<DIR>\t\t\t" + file.getName()); // ํ์ผ ์ด๋ฆ์ ์คํธ๋ง์ผ๋ก ๋ฐํ
} else {
System.out.print("\t\t\t" + file.length() + "\t" + file.getName());
}
System.out.println();
}
}
FileInputStream
- ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ์ด ๋ค์ผ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํธ ๊ธฐ๋ฐ ์ ๋ ฅ ์คํธ๋ฆผ
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("src/ํ์ผ์ธํ์คํธ๋ฆผ/FileInputStreamEx.java");
int data;
while ( (data = fis.read() ) != -1 ) {
System.out.write(data);
}
fis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
FileOutputStream
- ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ ์ฅ ํ ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํธ ๊ธฐ๋ฐ ์ถ๋ ฅ ์คํธ๋ฆผ
- ๋ฐ์ดํธ ๋จ์๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆผ, ์ค๋์ค, ๋น๋์ค, ํ ์คํธ ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ
public static void main(String[] args) throws IOException {
String originalFileName = "src/ํ์ผ์์ํ์คํธ๋ฆผ/house.jpg";
String targetFileName = "src/house.jpg";
FileInputStream fis = new FileInputStream(originalFileName);
FileOutputStream fos = new FileOutputStream(targetFileName);
int readByteNo;
byte[] readBytes = new byte[100];
while( (readByteNo = fis.read(readBytes)) != -1 ) {
fos.write(readBytes, 0, readByteNo);
}
fos.flush();
fos.close();
fis.close();
System.out.println("๋ณต์ฌ๊ฐ ์ ๋์์ต๋๋ค.");
}
FileInputStream๊ณผ Scanner ํ์ฉ
- Scanner ์ ๋ ฅ์ผ๋ก ํ์ผ์ ์ฝ์ต๋๋ค.
- ์ค์บ๋์ hasNextLine()์ผ๋ก ์ฝ์ ๋ด์ฉ ์๋์ง ํ์ธ
package ํ์ผ์
์ถ๋ ฅ;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileInput {
public static void main(String[] args) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("src/ํ์ผ์
์ถ๋ ฅ/chiken.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Scanner sc = new Scanner(inputStream);
while(sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println(line);
}
}
}
๋ณด์กฐ ์คํธ๋ฆผ
โญ์ฑ๋ฅ ํฅ์ ๋ณด์กฐ์คํธ๋ฆผ
BufferedOutputStream, BufferedWriter
BufferedInputStream, BufferedReader
๋ฒํผ ์ฌ์ฉ ์ !!!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null; // ์
๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
BufferedOutputStream bos = null; // ์ถ๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
int data = -1; // ๋ ์ด์ ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฏธ
long start = 0; // ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ์ ์ํ ๋ณ์
long end = 0; // ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ์ ์ํ ๋ณ์
fis = new FileInputStream("src/์ฑ๋ฅํฅ์๋ณด์กฐ์คํธ๋ฆผ0210/night.jpg");
bis = new BufferedInputStream(fis);
fos = new FileOutputStream("clone_night.jpg");
start = System.currentTimeMillis(); // 1970๋
1์ 1์ผ 0์ 0๋ถ 0์ด๋ก ๋ถํฐ ํ์ฌ๊น์ง ๊ฒฝ๊ณผ ์๊ฐ์ ๋ฐ๋ฆฌ์ด๋ก ํ์
while((data = bis.read()) != -1) {
fos.write(data);
}
fos.flush();
end = System.currentTimeMillis();
fos.close();
bis.close();
fis.close();
System.out.println("๋ฒํผ ์ฌ์ฉ์ ํ์ง ์์ ๊ฒฝ์ฐ์ ๋ํ ์๊ฐ : " + (end - start) + "ms");
๋ฒํผ ์ฌ์ฉ์ ํ์ง ์์ ๊ฒฝ์ฐ์ ๋ํ ์๊ฐ : 588ms
๋ฒํผ ์ฌ์ฉ ํ!!!!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null; // ์
๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
BufferedOutputStream bos = null; // ์ถ๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
int data = -1; // ๋ ์ด์ ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฏธ
long start = 0; // ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ์ ์ํ ๋ณ์
long end = 0; // ๊ฒฝ๊ณผ ์๊ฐ ๊ณ์ฐ์ ์ํ ๋ณ์
// ๋ฒํผ ๋ณด์กฐ ์คํธ๋ฆผ ๋์ด์ ์ฑ๋ฅ ์ธก์
fis = new FileInputStream("src/์ฑ๋ฅํฅ์๋ณด์กฐ์คํธ๋ฆผ0210/night.jpg");
bis = new BufferedInputStream(fis);
fos = new FileOutputStream("clone_night.jpg");
bos = new BufferedOutputStream(fos);
start = System.currentTimeMillis();
while((data = bis.read()) != -1) {
bos.write(data);
}
bos.flush();
end = System.currentTimeMillis();
fos.close();
bis.close();
fis.close();
bos.close();
System.out.println("๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋ํ ์๊ฐ : " + (end - start) + "ms");
}
}
๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋ํ ์๊ฐ : 1ms
๐ธ ์ฑ๋ฅ์ด ๊ต์ฅํ ์ข์์ง ๊ฒ์ ํ์ธ ํ ์ ์๋ค!
๊ธฐ๋ณธ ํ์ ๋ณด์กฐ์คํธ๋ฆผ
- Scanner๋ก ๋์ฒด ๊ฐ๋ฅ
- ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฐ์ดํธ ๋จ์๋ก ์
์ถ๋ ฅ ํ๊ธฐ ๋๋ฌธ์ ์๋ฐ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
์ฌ์ฉํ ์ ์์.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณด์กฐ ์คํธ๋ฆผ์ ์ฐ๊ฒฐํด ์ฌ์ฉํจ.
DataInputStream, DataOutputStream
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("๊ธฐ๋ณธํ์
๋ณด์กฐ์คํธ๋ฆผ.bin");
DataOutputStream dos = new DataOutputStream(fos); // ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ํ์
์ ์ง์ํ๋ ๋ณด์กฐ ์คํธ๋ฆผ
dos.writeUTF("์ด์์ "); // ๋ฌธ์์ด ๋ฉ์๋
dos.writeDouble(99.8); // ์ค์ํ ๋ฉ์๋
dos.writeInt(1); // ์ ์ํ ๋ฉ์๋
dos.writeUTF("ํ์๋ด");
dos.writeDouble(64.5);
dos.writeInt(2);
dos.writeUTF("ํ๊ธธ๋");
dos.writeDouble(84.2);
dos.writeInt(3);
dos.flush();
dos.close();
FileInputStream fis = new FileInputStream("๊ธฐ๋ณธํ์
๋ณด์กฐ์คํธ๋ฆผ.bin");
DataInputStream dis = new DataInputStream(fis);
for(int i = 0; i < 3; i++) {
String name = dis.readUTF(); // ๋ฌธ์์ด์ ์ฝ์
double score = dis.readDouble();
int num = dis.readInt();
System.out.println(name + " : " + score + num);
}
}
}
โญ๊ฐ์ฒด ์ ์ถ๋ ฅ ๋ณด์กฐ์คํธ๋ฆผ
- ์ง๋ ฌํ?
โก๏ธ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ฅผ ํ์ผ์ด๋ ๋คํธ์ํฌ๋ก ์ ์กํ๊ธฐ ์ํด์ ์ฐ์์ ์ธ ๋ฐ์ดํธ ํํ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ - ์ง๋ ฌํ๋ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ฒด๋ก ๋ณต์ํ๋ ๊ฒ์ '์ญ์ง๋ ฌํ'๋ผ๊ณ ํฉ๋๋ค.
Serializable
์ง๋ ฌํ ์์ฒด๋ ์ ์ฐ์ด์ง ์์ง๋ง(๊ฐ์ฒด ์ง๋ ฌํ๋ JAVA๋ผ๋ฆฌ๋ง ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ณดํต JSON์ ์ด์ฉํจ)
์ง๋ ฌํ๋ฅผ ์ฐ๋ ํจํด์ ๋ฐฑ์๋์์ ์์ฃผ ์ฐ์ด๋ฏ๋ก ์ต์ํด์ง๋๋ก ํ์.
- ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ ํ๊ธฐ ์ํด์๋
Serializable
์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์์ผ ํฉ๋๋ค. - ํด๋์ค ๋ด์ ํฌํจ๋ ํ๋ ์ค ์ง๋ ฌํ ๋์์์ ์ ์ธํ ๋ด์ฉ์ด ์์ผ๋ฉด
transient
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
import java.io.Serializable;
import java.util.Date;
public class Board implements Serializable {
private int number;
private String title;
private String content;
private String writer;
private Date date;
transient String test;
public Board(int number, String title, String content, String writer, Date date) {
this.number = number;
this.title = title;
this.content = content;
this.writer = writer;
this.date = date;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException, ClassNotFoundException { // ๊ฐ์ฒด์ ๋ํ ์ง๋ ฌํ
writeList();
List<Board> list = readList();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Board e : list) {
System.out.println("๋ฒํธ : " + e.getNumber());
System.out.println("์ ๋ชฉ : " + e.getTitle());
System.out.println("๋ด์ฉ : " + e.getContent());
System.out.println("์ฐ์ถ๊ฐ : " + e.getWriter());
System.out.println("์๊ฐ : " + sdf.format(e.getDate()));
System.out.println("------------------------------------");
}
}
static void writeList() throws IOException {
List<Board> list = new ArrayList<>();
list.add(new Board(1, "๋๋ ์๋ก","์ฐ์ ์๋ฅ","๊น๋ก๋", new Date()));
list.add(new Board(2, "๋ฌด์์ด๋ ๋ฌผ์ด๋ณด์ด","์๋ฅ","์ด๋ก๋", new Date()));
list.add(new Board(3, "์ฐจํธ๋ฅผ ๋ฌ๋ฆฌ๋ ๋จ์","์ฐจํธ ์๋ฅ","๋ฐ๋ก๋", new Date()));
FileOutputStream fos = new FileOutputStream("board.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list); // ๊ฐ์ฒด ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ด์ฉํด list๋ฅผ ์ถ๋ ฅ
oos.flush();
oos.close();
}
static List<Board> readList() throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("board.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
List<Board> list = (List<Board>)ois.readObject(); // ํ์ผ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ญ์ง๋ ฌํ
return list;
}
}
๋ฒํธ : 1
์ ๋ชฉ : ๋๋ ์๋ก
๋ด์ฉ : ์ฐ์ ์๋ฅ
์ฐ์ถ๊ฐ : ๊น๋ก๋
์๊ฐ : 2023-02-10
------------------------------------
๋ฒํธ : 2
์ ๋ชฉ : ๋ฌด์์ด๋ ๋ฌผ์ด๋ณด์ด
๋ด์ฉ : ์๋ฅ
์ฐ์ถ๊ฐ : ์ด๋ก๋
์๊ฐ : 2023-02-10
------------------------------------
๋ฒํธ : 3
์ ๋ชฉ : ์ฐจํธ๋ฅผ ๋ฌ๋ฆฌ๋ ๋จ์
๋ด์ฉ : ์ฐจํธ ์๋ฅ
์ฐ์ถ๊ฐ : ๋ฐ๋ก๋
์๊ฐ : 2023-02-10
------------------------------------
'๐๏ธ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ(Java) - ๊ฐ์ฒด ์ง๋ ฌํ(Serializable) ์์ . ์นดํ ๋ฉ๋ด ๋ง๋ค๊ธฐ (1) | 2023.02.14 |
---|---|
์๋ฐ(Java) - ์ ์ถ๋ ฅ ์คํธ๋ฆผ ์ค์ต ๋ฌธ์ (0) | 2023.02.10 |
์๋ฐ(Java) - ์คํธ๋ฆผ(Stream) (0) | 2023.02.08 |
์๋ฐ(Java) - ๋๋ค(Lambda) (0) | 2023.02.08 |
์๋ฐ(Java) - ์์ธ์ฒ๋ฆฌ (1) | 2023.02.07 |