* 입출력
*스트림의 분류
-데이터 싱크 스트림 : 데이터를 소스에서 읽거나 목적지에 기록.
-데이터 처리 스트림 : 들어오는 데이터를 가공하여 내보낸다.
* 입출력 스트림
-바이트 스트림 : 입력바이트 스트림, 출력바이트 스트림
-문자 스트림 : 입력문자 스트림, 출력문자 스트림.
* InputStream 과 OutputStream
추상클래스로서 모든 바이트 스트림의 조상 클래스.
ex)
public static void main(String[] args) {
// FIXME Auto-generated method stub
FileInputStream in = null;
FileOutputStream out = null; // try catch 블럭과 finally 블럭에서 접근 가능하 기 위해 여기서 변수 선언.
try {
out = new FileOutputStream("data.txt")
for(int i = 0; i < 300; i++)
{
out.write(i);
}
in = new FileInputStream("data.txt"); //이것도 객체다 , (메모리를 많이 사 용하기 때문에)만든 스트림은 다쓰 면 닫아줘야함.
int c;
while( (c = in.read()) != -1 )
{
System.out.println(c);
}
} catch (IOException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
finally{
try{
if(in != null)
in.close(); //in out 둘다 IOException 을 처리하는 try구문 에 있어야 한다.
if(out != null)
out.close();
}catch(IOException e){
}
}
절대경로 : 파일시스템의 최상위부터 표현하는경로
상대경로 : 내 나름의 기준점을 출발로 하는 경로.
정규경로 : 최상위로부터의 경로(심플하고 순수한 경로)
. : 현재폴더
.. : 상위폴더
/로 시작하면 절대경로.
윈도우에서는 드라이브명부터 시작하면 절대경로.
*BufferedInputStream 과 BufferedOutputStream
FileInputStream와 FileOutputStream를 사용하면 1byte 단위로 입/출력이 이루어 지면 기계적인 동작이 많아져서 비효율 적이다.
BufferedInputStream은 1 바이트씩 읽어들이는 작업은 파일로부터 읽어오는 것이 아닌 준비된 시스템 버퍼에서 읽어오게 되므로, 파일 입력으로 인한 성능 저하를 최소화 할 수 있다.
ex)위 예제 에서 버퍼로 바꾸어 보았다.
out = new BufferedOutputStream(new FileOutputStream("data.txt"));
이때 버퍼에 꽉차지 않아서 파일로 안넘어간 데이터들을 모두 출력해주는 명령어는
out.flush(); //버퍼의 내용물을 즉시 처리.
BufferedOutputStream도 역시 하드 디스크 파일에 대한 출력을 최소화 하여 효율을 향상 시킨다.
ex) 마찬가지로 위 예제해서 버퍼로 바꾸어 보았다.
in = new BufferedInputStream(new FileInputStream("data.txt"));
'[JAVA]' 카테고리의 다른 글
[JAVA]10월 5일 네트워크 프로그래밍 (0) | 2015.10.05 |
---|---|
[JAVA]10월 2일 입출력, ObjectOutputStream와 ObjectInputStream, Serializable, OutputStreamWriter 와 InputStreamReader (0) | 2015.10.02 |
[JAVA]9월 30일 스레드, Runnable 인터페이스, 동기화, wait() 와 notify() (0) | 2015.09.30 |
[JAVA]9월 25일 제네릭, 컬렉션, (0) | 2015.09.25 |
[JAVA]9월 24일 예외처리, 예외의 종류, 정규 표현식, Pattern클래스 (0) | 2015.09.24 |