표준 입출력과 File: RandomAccessFile

2022. 4. 27. 14:49·자바/입출력 IO

1. RandomAccessFile

- 자바에서는 입력과 출력이 각각 분리되어 별도로 작업을 하도록 설계되어 있는데,

이 RandomAccessFile만은 하나의 클래스로 입력과 출력을 모두 할 수 있도록 되어 있다.

 

- RandomAccessFile은 InputSteam과 OutputStream으로부터 상속받지 않고, DataInput 인터페이스와

DataOutput 인터페이스를 모두 구현했기 때문에 읽기와 쓰기가 모두 가능하다.

 

- RandomAccessFile 클래스의 가장 큰 장점은 파일의 어느 위치에나 읽기/쓰기가 가능하다는 것이다.

( 다른 입출력 클래스들은 입출력 소스에 순착적으로 읽기/쓰기를 하기 때문에 읽기와 쓰기가

제한적이다. )

 

- 그러므로, RandomAccessFile 클래스는 어느 위치에 읽기/쓰기를 가능하게 하기 위해서 내부적으로

포인터를 사용하는데, 입출력 시에 작업이 수행되는 곳이 바로 파일 포인터가 위치한 곳이 된다.

 

 

 

- 아래는 RandomAccessFile 클래스의 생성자/메서드를 설명한다.

 

(1) RandomAccessFile(File file, String mode)

또는

RandomAccessFile(String file, String mode)

: 주어진 file에 읽기 또는 읽기/쓰기를 하기 위한 RandomAccessFile 인스턴스를 생성한다.

: mode의 값은 "r", "rw", "rws", "rwd"가 지정가능하다.

( "rwd"는 파일 내용만, "rws"는 파일의 메타정보도 포함해서 출력한다. )

 

(2) FileChannel getChannel()

: 파일의 파일 채널을 반환한다.

 

(3) FileDescriptor getFD()

: 파일의 파일 디스크립터를 반환한다.

 

(4) long getFilePointer()

: 파일의 포인터 위치를 알려준다.

 

(5) long length()

: 파일의 크기를 얻을 수 있다. (byte 단위)

 

(6) void seek(long pos)

: 파일 포인터의 위치를 변경한다.

: 위치는 파일의 첫 부분부터 pos 크기만큼 떨어진 곳이다.

 

(7) void setLLength(long newLength)

: 파일의 크기를 지정된 길이로 변경한다. (byte 단위)

 

(8) int skipBytes(int n)

: 지정된 수만큼의 byte를 건너뛴다.

 

 

 

 

1-1. RandomAccessFile를 이해하기 위한 예제(1)

: 파일에 출력작업이 수행되었을 때 파일 포인터의 위치가 어떻게 달라지는지에 대해서 보여주는

예제이다. 

 

Exercise022

( writeInt()를 쓰면 +4 byte씩, writeLong()를 쓰면 +8 byte씩 늘어나는 것을 볼 수 있다. )

 

 

 

 

1-2. RandomAccessFile를 이해하기 위한 예제(2)

: RandomAccessFile로 파일을 writeInt()로 쓴 다음 readInt()로 읽는 예제이다.

 

Exercise023

( 출력 결과 아무것도 출력되지 않는다. )

( 그 이유는 writeInt()를 수행하면서 파일 포인터의 위치가 파일의 마지막으로 이동되었기 때문이다. )

( 그러므로, 아래의 코드처럼 seek() 메서드를 넣어 다시 파일의 초기위치 0으로 set해주어야 한다. )

 

raf.seek(0); 을 추가한 코드

 

 

 

 

1-3. RandomAccessFile을 이해하기 위한 예제(3)

: 1-2 예제(2)의 파일을 가지고 국어 과목의 점수만을 합계하는 예제이다.

 

Exercise024

( int가 4 byte씩 저장되어 있으므로, 4칸을 당겨서 읽어야 하므로 4*4 = 16만큼 더해줘야 한다. )

저작자표시 (새창열림)

'자바 > 입출력 IO' 카테고리의 다른 글

표준 입출력과 File: File(2)  (0) 2022.04.28
표준 입출력과 File: File(1)  (0) 2022.04.27
표준 입출력과 File: System(in, out, err)  (0) 2022.04.27
문자 기반의 보조 스트림: (Buffered, InputStream, OutputStream) 읽기와 쓰기  (0) 2022.04.27
문자 기반 스트림: (File, Piped) Reader/Write  (0) 2022.04.26
'자바/입출력 IO' 카테고리의 다른 글
  • 표준 입출력과 File: File(2)
  • 표준 입출력과 File: File(1)
  • 표준 입출력과 File: System(in, out, err)
  • 문자 기반의 보조 스트림: (Buffered, InputStream, OutputStream) 읽기와 쓰기
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      file
      snail
      serializable
      역직렬화
      스트림
      outputstream
      선택 정렬
      알고스팟
      Arrays
      안드로이드 스튜디오
      안정 정렬
      람다식
      ServerSocket
      제자리 정렬
      다형성
      코딩테스트
      문자 기반 스트림
      Collections Framework
      코딩트리조별과제
      소켓 프로그래밍
      map()
      유용한 클래스
      중간연산
      InputStream
      java.lang패키지
      자바 개념
      java.time 패키지
      코드트리
      TCP 소켓 프로그래밍
      불안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    표준 입출력과 File: RandomAccessFile
    상단으로

    티스토리툴바