Main Content

fread

이진 파일(Binary File)에서 데이터 읽기

설명

예제

A = fread(fileID)는 이진 파일에서 열 벡터 A로 데이터를 읽어 들이고 파일 끝(EOF) 마커에 파일 포인터를 배치합니다. 파일 ID fileID로 이진 파일을 지정합니다. fileID 값은 fopen으로 파일을 열어 구할 수 있습니다. 읽기가 끝나면 fclose(fileID)를 호출하여 파일을 닫습니다.

A = fread(fileID,sizeA)는 파일 데이터에서 sizeA 차원을 배열 A로 읽어 들이고 마지막으로 읽은 값 다음에 파일 포인터를 배치합니다. fread는 열 순서대로 A를 채웁니다.

예제

A = fread(fileID,precision)precision에 설명된 형식과 크기에 따라 파일 내 값을 해석합니다.

예제

A = fread(fileID,sizeA,precision)은 파일 데이터에서 sizeA 차원을 배열 A로 읽어 들이고 마지막으로 읽은 값 다음에 파일 포인터를 배치합니다. fread는 열 순서대로 A를 채웁니다. 파일 내 값은 precision에 설명된 형식과 크기에 따라 해석됩니다.

예제

A = fread(___,skip)은 파일의 각 값을 읽은 다음 skip에 지정된 바이트 또는 비트 수를 건너뜁니다.

예제

A = fread(___,machinefmt)는 파일에서 바이트 또는 비트를 읽는 순서를 추가로 지정합니다.

[A,count] = fread(___)freadA로 읽어 들인 문자의 개수를 추가로 반환합니다. 이 구문은 위에 열거된 구문 중 하나의 입력 인수에 사용할 수 있습니다.

예제

모두 축소

샘플 파일 nine.bin에 요소를 9개 가진 벡터를 씁니다.

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9]);
fclose(fileID);

파일의 모든 데이터를 double형 클래스 벡터로 읽어 들입니다. 기본적으로, fread는 한 번에 1바이트씩 파일을 읽어 각 바이트를 8비트 부호 없는 정수(uint8)로 해석한 후 double형 배열을 반환합니다.

fileID = fopen('nine.bin');
A = fread(fileID)
A = 9×1

     1
     2
     3
     4
     5
     6
     7
     8
     9

fread는 파일의 각 바이트에 대해 하나의 요소를 가진 열 벡터를 반환합니다.

A에 대한 정보를 확인합니다.

whos A
  Name      Size            Bytes  Class     Attributes

  A         9x1                72  double              

파일을 닫습니다.

fclose(fileID);

9개의 배정밀도 값이 포함된, doubledata.bin이라는 이름의 파일을 만듭니다.

fileID = fopen('doubledata.bin','w');
fwrite(fileID,magic(3),'double');
fclose(fileID);

doubledata.bin 파일을 열고 3×3 배열 A로 데이터를 읽어 들입니다. 소스 데이터가 double형 클래스임을 지정합니다.

fileID = fopen('doubledata.bin');
A = fread(fileID,[3 3],'double')
A = 3×3

     8     1     6
     3     5     7
     4     9     2

파일을 닫습니다.

fclose(fileID);

1~9의 값을 포함하는 nine.bin이라는 이름의 파일을 만들고, uint16 값으로 데이터를 씁니다.

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9],'uint16');
fclose(fileID);

첫 6개 값을 3×2 배열로 읽습니다. 소스 데이터가 uint16형 클래스임을 지정합니다.

fileID = fopen('nine.bin');
A = fread(fileID,[3,2],'uint16')
A = 3×2

     1     4
     2     5
     3     6

fread는 열 순서대로 nine.bin 파일의 첫 6개 값으로 구성된 배열을 반환합니다.

파일 시작 부분으로 돌아갑니다.

frewind(fileID)

한 번에 두 값을 읽고 다음 값을 읽기 전 한 값을 건너뜁니다. precision'2*uint16'을 사용하여 이 형식을 지정합니다. 데이터가 uint16형 클래스이므로 각 값은 2바이트로 표현됩니다. 따라서 skip 인수를 2로 지정합니다.

precision = '2*uint16';
skip = 2;
B = fread(fileID,[2,3],precision,skip)
B = 2×3

     1     4     7
     2     5     8

fread는 열 순서대로 nine.bin의 값이 채워진 2×3 배열을 반환합니다.

파일을 닫습니다.

fclose(fileID);

이진화 십진수(BCD) 값으로 파일을 만듭니다.

str = ['AB'; 'CD'; 'EF'; 'FA'];

fileID = fopen('bcd.bin','w');
fwrite(fileID,hex2dec(str),'ubit8');
fclose(fileID);

한 번에 1바이트씩 읽습니다.

fileID = fopen('bcd.bin');
onebyte = fread(fileID,4,'*ubit8');

이진화 십진수(BCD) 값을 표시합니다.

disp(dec2hex(onebyte))
AB
CD
EF
FA

frewind를 사용하여 파일 시작 부분으로 돌아갑니다. 리틀 엔디안 시스템에서 한 번에 4비트를 읽을 경우 결과가 잘못된 순서로 표시됩니다.

frewind(fileID)

err = fread(fileID,8,'*ubit4');
disp(dec2hex(err))
B
A
D
C
F
E
A
F

frewind를 사용하여 파일 시작 부분으로 돌아갑니다. 전과 같이 한 번에 4비트씩 데이터를 읽지만 올바른 결과를 표시하기 위해 빅 엔디안 순서를 지정합니다.

frewind(fileID)

correct = fread(fileID,8,'*ubit4','ieee-be');
disp(dec2hex(correct))
A
B
C
D
E
F
F
A

파일을 닫습니다.

fclose(fileID);

입력 인수

모두 축소

열려 있는 이진 파일의 파일 ID로, 정수로 지정됩니다. fread로 파일을 읽으려면 fopen을 사용하여 파일을 연 다음 fileID를 가져와야 합니다.

데이터형: double

출력 배열 A의 차원으로, 정수 Inf 또는 요소를 2개 가진 행 벡터로 지정됩니다.

sizeA 입력 형식출력 배열 A의 차원
Inf각 요소에 파일의 각 값이 포함되는 열 벡터입니다.
nn개 요소가 포함되는 열 벡터입니다.
[m,n]m×n 행렬로, 열 순서대로 채워집니다. nInf일 수 있지만, m은 inf일 수 없습니다.

읽을 값의 클래스 및 크기(비트 수)로, 다음 형식 중 하나로 된 문자형 벡터나 string형 스칼라로 지정됩니다. 입력값으로 출력 행렬 A의 클래스를 지정하는 것은 선택 사항입니다.

precision 입력 형식설명
source입력 값의 클래스는 source에 지정된 클래스 형식을 갖습니다. 출력 행렬 A의 클래스는 double형입니다.
예: 'int16'
source=>output입력 값의 클래스는 source에 지정된 클래스 형식을 갖습니다. 출력 행렬 A의 클래스는 output에 지정됩니다.
예: 'int8=>char'
*source입력 값과 출력 행렬 Asource에 지정된 클래스 형식입니다. bitn 또는 ubitn 정밀도(Precision)의 경우 출력은 입력을 포함할 수 있는 가장 작은 클래스를 갖습니다.
예: '*ubit18'
다음과 동일합니다. 'ubit18=>uint32'

N*source 또는
N*source=>output

skip 인수에 지정된 바이트 수를 건너뛰기 전에 N개의 값을 읽습니다.
예: '4*int8'

다음 표에는 sourceoutput에 사용할 수 있는 값이 나와 있습니다.

값 유형정밀도비트(바이트)

정수, 부호 없음

'uint'

32 (4)

'uint8'

8 (1)

'uint16'

16 (2)

'uint32'

32 (4)

'uint64'

64 (8)

'uchar'

8 (1)

'unsigned char'

8 (1)

'ushort'

16 (2)

'ulong'

32 (4)

'ubitn'

1n64

정수, 부호 있음

'int'

32 (4)

'int8'

8 (1)

'int16'

16 (2)

'int32'

32 (4)

'int64'

64 (8)

'integer*1'

8 (1)

'integer*2'

16 (2)

'integer*4'

32 (4)

'integer*8'

64 (8)

'schar'

8 (1)

'signed char'

8 (1)

'short'

16 (2)

'long'

32 (4)

'bitn'

1n64

부동소수점 숫자

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

문자

'char*1'

8 (1)

'char'

MATLAB®char형은 고정된 크기가 아니며, 바이트 수는 파일과 연결된 인코딩 체계에 따라 달라집니다. fopen을 사용하여 인코딩을 설정합니다.

대부분의 source 값의 경우, fread가 전체 값을 읽기 전에 파일 끝에 도달하면 최종 값의 결과를 반환하지 않습니다. 그러나 sourcebitn 또는 ubitn인 경우 fread는 최종 값에 대한 부분 결과를 반환합니다.

참고

MATLAB에 NaNInf 값을 유지하려면 double형 또는 single형 클래스의 데이터를 읽고 쓰십시오.

데이터형: char | string

각 값을 읽은 후에 건너뛸 바이트 수로, 스칼라로 지정됩니다. bitn 또는 ubitn으로 precision을 지정하는 경우 skip을 비트 단위로 지정해야 합니다.

skip 인수를 사용하여 고정 크기 레코드의 비연속 필드에서 데이터를 읽을 수 있습니다.

파일에서 바이트를 읽는 순서로, 문자형 벡터나 string형 스칼라로 지정됩니다. machinefmt를 다음 표에 있는 값 중 하나로 지정합니다. bitnubitn 정밀도의 경우, machinefmt는 바이트 내 비트를 읽는 순서를 지정하지만 바이트를 읽는 순서는 시스템 바이트 순서에 따릅니다.

'n' 또는 'native'

시스템 바이트 순서(디폴트 값)

'b' 또는 'ieee-be'

빅 엔디안 순서

'l' 또는 'ieee-le'

리틀 엔디안 순서

's' 또는 'ieee-be.l64'

빅 엔디안 순서, 64비트 long 데이터형

'a' 또는 'ieee-le.l64'

리틀 엔디안 순서, 64비트 long 데이터형

기본적으로, 현재 지원되는 플랫폼은 모두 새 파일에 리틀 엔디안 순서를 사용합니다. 기존의 이진 파일은 빅 엔디안 또는 리틀 엔디안 순서를 사용할 수 있습니다.

데이터형: char | string

출력 인수

모두 축소

파일 데이터로, 열 벡터로 반환됩니다. sizeA 인수를 지정하면 A는 지정된 크기의 행렬이 됩니다. precision 인수에서 다른 클래스를 지정하지 않는 한 A의 데이터는 double형 클래스를 갖습니다.

읽은 문자의 수로, 스칼라 값으로 반환됩니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장