Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

우주코딩

File 입출력 클래스 본문

자바 본 강의

File 입출력 클래스

우주코딩 2021. 9. 10. 10:07

File 클래스

String -> 문자열
Date -> 날짜
File -> 파일 디렉토리

OS에 따라 API 사용법이 다르다.

JVM에서 제공하는 API는 OS에 상관없이 같다.
JVM의 API에서 해당 OS의 API를 호출하기 때문에 자바 개발자로 각 OS의 API를 알 필요가 없다.

App - > File -> OS File System API -> 파일 디렉토리 위치 저장

dll과 lib

컴파일 된 기계어 코드
.lib - 정적 로딩 라이브러리(static linking library)

.dll(windows)
.so(Unix) - 동적 로딩 라이브러리(dynamic linking library)
function이나 structure, class 등의 코드를 모아둔 파일 = "라이브러리(library)"

c / c++ : .dll, .lib. .so
Java : .jar

링킹 - 프로그램에서 호출하는 외부 함수가 들어있는 라이브러리를 함께 묶어서 실행파일을 만든다.

a.c 소스를 컴파일 해서 a.obj 기계어로 만든다. + .lib 함수 + dll 함수들을 포함해 링킹하여 a.exe 실행파일을 생성한다.
dll 파일은 실행 파일에 포함되지 않는다. 파일 정보만 포함된다.
lib 파일은 파일 전체가 실행 파일에 포함된다.

프로그램 실행과 라이브러리

.dll은 프로그램에서 가리키는 dll파일을 메모리에 따로 로딩한다.

이미 메모리에 dll 파일이 로딩되어 있다면 그 로딩된 dll을 사용한다.
결론 - 중복로딩 안됨. 메모리 절약

스태틱 라이브러리(lib) 는 중복 로딩된다.

Java App -> 호출 -> 자바 라이브러리 (자바 클래스의 메서드 File,FildInputStream, Socket, System) -> 호출 -> Tread API, Networt API, File,System API, OS 등등

자바 입출력 스트림 클래스

바이트 단위로 출력하기

  1. 파일로 데이터를 출력하는 객체를 준비한다.
    지정된 경로에 해당 파일을 자동으로 생성한다. 기존에 같은 이름의 파일이 있으면 덮어쓴다. 주의! 기존 파일이 삭제된다. 파일 경로가 절대 경로가 아니면 현재 디렉토리가 기준이 된다.

FileOutputStream out = new FileOutputStream("temp/test1.data");

  1. 1바이트를 출력한다.
    write(int) : 1바이트를 출력하는 메서드이다. 파라미터의 타입이 int라고 해서 4바이트를 출력하는 것이 아니다. 오직 1바이트만 출력한다.

1개의 파티션 = 디렉토리
유닉스는 하드디스크의 파티션이 몇 개던지 루트가 한개이다. 특정 디렉토리가 별도의 하드디스크의 파티션을 가리킨다.

윈도우는 1개의 파티션이 드라이버 한 개이다.

  1. 출력 도구를 닫는다. close()를 호출하면 FileOutputStream이 작업하는 동안 사용했던 버퍼(임시메모리)를 비운다. OS에서 제공한 파일과의 연결을 끊는다.

out.close();

FileInputStream

read() : 1바이트를 읽어서 int 값으로 리턴한다.
read(byte[]) : 바이트를 읽어서 배열에 저장한 개수 int를 리턴, 파라미터의 바이트 배열은 배열이 다 찰 때까지 파일에서 바이트를 읽어 배열에 저장한다.
read(byte[], int, int) : 바이트를 읽어서 배열에 저장한 갯수를 int로 리턴, 파라미터의 첫번째 int는 바이트를 저장할 배열의 시작 위치(index), 두번째 int 는 저장하기를 희망하는 개수

String 객체에서 byte[] 얻기

String s = new String ("AB가각");
자바는 해당 파라미터의 값을 0041,0042,AC00,AC01로 저장한다. (문자열을 다룰 때 UTF-16 문자표에 따라 코드를 다룬다.)
s.getBytes(); =>
41,42,EA,B0,80,EA,B0,81 (이클립스에서 실행할 때)
41, 42, B0A1, B0A2 (윈도우 콘솔창에서 실행)
41, 42, EAB080, EAB081 (Unix/Linux 콘솔창에서 실행)

Comments