본문 바로가기

Programming/JAVA

[JAVA / 안드로이드] 데이터 입출력 및 전송

1. Stream (스트림)
데이터의 흐름을 의미하여 자바프로그램은 입력장치로 부터 InputStream을 읽어들이고, 출력장치로 OutputStream을 내보낸다.

2. File 생성
java.io.File을 import하여 사용
File foo = new File("foo.txt") -> 파일 불러오기
파일이 없을 경우에는 foo.createNewFile(); 을 통해 실제로 생성 가능.
폴더의 경우에는 foo.mkdir();
삭제는 간단히 foo.delete();

3. File 문자데이터 읽고 쓰기, read and write
FileReader("문자열") 혹은 FileReader(File 객체)를 통해 FileReader object를 생성 후(FileWriter도 마찬가지),
read() 혹은 read(길이가 정의된 배열) 혹은 write(문자 혹은 String)를 통해 읽기/쓰기를 하고,
close()를 통해 reader 혹은 writer를 닫아준다.

4. File 바이트 데이터 읽고 쓰기, FileInputStream and FileOutputStream
바이트 형식의 데이터를 읽고 쓰기 위함.
사용법은 FileReader, FileWriter와 같음.

5. 다양한 데이터 읽고 쓰기, DataInputStream and DataOutputStream
데이터를 변환하여 파일을 읽고 쓸 수 있음.
단, 직접 파일에 쓸 수 없어 FileInputStream, FileOutputStream과 연동하여 사용.
FileOutputStream f_stream = new FileOutputStream("foo");
DataOutputStream d_stream = new DataOutputStream(f_stream);
d_stream.write(data);
f_stream.close();
d_stream.close();
InputStream도 마찬가지.

6. Object 읽고 쓰기, ObjectInputStream and ObjectOutputStream
Serializable 인터페이스를 구현한 클래스의 객체들을 읽고 쓸 수 있음.
사용법은 5번과 같음.

7. 버퍼를 활용한 데이터 읽고 쓰기. BufferedInputStream and BufferedOutputStream
위와 같이 직접 프로그램이 하드에 접근하여 데이터를 읽고 쓰는 것은 성능 저하를 불러일으킬 수 있음.
버퍼에 임시로 데이터를 저장하고 빠르게 읽고 쓰는 방법.
역시 직접 파일에 접근할 수 없기에 FileInputStream 혹은 FileOutputStream을 활용함.
사용방법은 역시 같으며, 단 임시 버퍼의 크기를 조정할 수 있다. (설정하지 않을 시, 512 default)
new BufferedOutputStream(f_stream, 1024);
위와 같이 정의함으로써, 임시 버퍼가 1024의 크기가 되면,
파일에 임시저장된 데이터를 쓰고 버퍼를 비우고 다시 채우게 된다.

8. 버퍼를 활용한 문자열 읽고 쓰기. BufferedReader and BufferedWriter.
이는 버퍼를 활용하여 문자열을 하드에 읽고 쓸 수 있게 해 주며,
파일에 접근하기 위에 FileReader와 FileWriter를 사용한다

9. 소켓을 활용한 데이터 통신 socket.getInputStream() and socket.getOutputSteam()
데이터 송신의 경우 보낼 데이터를 byte array로 생성.
OutputSteam out = socket.getOutputStream()
out.write(data);
out.flush();
out.close();
데이터 수신의 경우 받을 byte array 대기.
ItputSteam in = socket.getItputStream()
in.read(data);
in.close();