File IO ๐ฅ InputStream, OutputStream ๐ค
์์ ๊ด๊ณ
java.io.InputStream
โ java.io.FileInputStream
java.io.OutputStream
โ java.io.FileOutputStream
read()
InputStream์ผ๋ก๋ถํฐ 1byte์ฉ ์ฝ์ด์ int(4byte)์ ๋ด์ ๋ฐํํ๋ค.
๋ ์ด์ ์ฝ์ ๊ฒ์ด ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
write()
int(4byte)์ 1byte)์ฉ ๋ด์ OutputStream์ ์ด๋ค.
๐ป ์์ 1
๐ ์์ค ์ฝ๋
public class Main {
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream("temp/big_text.txt");
out = new FileOutputStream("temp/copy_big_text.txt");
int dataRead; // ์ฝ๊ณ ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ณ์
int bytes = 0; // ํ์ผ์ ๋ฐ์ดํธ ์ ์ ์ฅ
long startTime = System.currentTimeMillis();
// ํ์ผ ๋ณต์ฌ
// InputStream์์ 1byte์ฉ ์ฝ์ด์์, OutputStream์ 1byte์ฉ ์ด๋ค.
while (true) {
dataRead = in.read();
if (dataRead == -1)
break;
out.write(dataRead);
bytes++;
}
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime; // ๊ฒฝ๊ณผ ์๊ฐ
System.out.println("์ฝ๊ณ ์ด ๋ฐ์ดํธ : " + bytes);
System.out.println("๊ฒฝ๊ณผ ์๊ฐ(ms) : " + elapsedTime);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally { // ๋ฆฌ์์ค ํด์
try {
if (in != null)
in.close();
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
while ๋ฌธ์ ๋๋ฉด์ txt ํ์ผ ์ฒ์๋ถํฐ ๋๊น์ง ํ ๋ฐ์ดํธ์ฉ ์ฝ๊ณ ์ฐ๋ ์์ ์ ๋ฐ๋ณตํ๋ค.
ํ์ผ์ ํฌ๊ธฐ๊ฐ ํด์๋ก ์๊ฐ์ด ์์ฒญ๋๊ฒ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ๋ฐฉ๋ฒ์ ์ฐ์ด์ง ์๋๋ค.
๐ ์คํ ๊ฒฐ๊ณผ
์ค์ ๊ฒฝ๊ณผ ์๊ฐ๋ 20์ด ์ด์ ๊ฑธ๋ ธ๋ค.
์์ ๋ณด์๋ ์์ ๋ 1byte์ฉ ์ฝ๊ณ ์ฐ๊ฒ ๋๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค. ์์ ๋ฒํผ๋ฅผ ๋ง๋ค์ด์ ํ ๋ฒ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ๊ฒ์ด๋ค.
Java 7 ๋ฒ์ ๋ถํฐ ๋์ ๋ try-with-resource๋ฅผ ์ฌ์ฉํด๋ณธ๋ค.
๋ฆฌ์์ค๋ฅผ close ํ๋ ์ฝ๋๊ฐ ์์ด๋ ์๋์ผ๋ก close๊ฐ ์คํ๋๋ฏ๋ก ๋ฐ๋ก close()๋ฅผ ์จ ์ค ํ์๊ฐ ์๋ค.
๐ป ์์ 2
๐ ์์ค ์ฝ๋
public class Main {
public static void main(String[] args) {
try (
InputStream in = new FileInputStream("temp/big_text.txt");
OutputStream out = new FileOutputStream("temp/copy_big_text.txt");
) {
byte[] buf = new byte[1024]; // ๋ฒํผ
long startTime = System.currentTimeMillis();
int lengthRead = 0;
int bytes = 0;
while (true) {
lengthRead = in.read(buf);
if (lengthRead == -1)
break;
out.write(buf, 0, lengthRead);
bytes += lengthRead;
}
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("์ ์ฒด ๋ณต์ฌํ ๋ฐ์ดํธ : " + bytes);
System.out.println("๊ฒฝ๊ณผ ์๊ฐ : " + elapsedTime);
} catch (FileNotFoundException e) {
e.printStackTrace(0;
} catch (IOException e) {
e.printStackTrace();
}
}
}
buf๋ผ๋ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฒํผ๋ก ์ฌ์ฉํ์๋ค.
read() ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง byte [] ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ธ๋ค.
์ค์ ์ฝ์ด ๋ค์ธ ๋ฐ์ดํฐ๋ ๋งค๊ฐ๋ณ์ byte []์ ๋ด๊ธฐ๊ณ , read() ๋ฉ์๋๋ ์ฝ์ด ๋ค์ธ ๋ฐ์ดํธ ์๋ฅผ ๋ฐํํ๋ค. ๋ฐ๋ผ์ lengthRead์๋ ๊ทธ๋ ์ฝ์ด๋ค์ธ ๋ฐ์ดํธ ์๊ฐ ๋ด๊ฒจ์๋ค.
write() ๋ฉ์๋๋ ์ง์ ์ ์ฝ์ด๋ค์ธ ๋ฐ์ดํฐ๋งํผ ์ด๋ค.
0 ~ lengthRead - 1 ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ buf์ ์ฐ๋ ๊ฒ์ด๋ค.
ํ์ฌ ๋ฒํผ ์ฌ์ด์ฆ๋ 1024๋ก ํด์ฃผ์๊ธฐ ๋๋ฌธ์ ์์ 1์์ 1byte์ฉ ๋ด์์ค๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์์ 2์์๋ 1024byte์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๊ฒ ๋๋ค.
๐ ์คํ ๊ฒฐ๊ณผ
๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฝ๊ณ ์ด ๋ฐ์ดํธ๋ ๊ฐ์ง๋ง ๊ฒฝ๊ณผ ์๊ฐ์ด ์์ฒญ๋๊ฒ ์ค์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.