バイナリー読み込み

 投稿者:しばっち  投稿日:2017年11月14日(火)00時16分0秒
  CHARACTER INPUT #によるバイナリー読み込みが少し遅いようなので
テストしてみました

USB3.0 外付けHDD上のmp3ファイルでテストしました
※但し、これらのテスト結果はドライブやファイルによりかなりバラつきがあります

OPTION ARITHMETIC NATIVE
OPTION CHARACTER BYTE
FILE GETNAME N$
IF N$="" THEN STOP
OPEN #1:NAME N$
ASK #1: FILESIZE L
PRINT "FILE SIZE=";L;"Byte"
LET S$=REPEAT$(CHR$(0),L)
LET T=TIME
FOR I=1 TO L
   CHARACTER INPUT #1: S$(I:I)
NEXT I
LET K=TIME-T
PRINT K;"second"
PRINT L/K/1024;"KByte/s"
CLOSE #1
END

実行結果

FILE SIZE= 4784092 Byte
59.9100000000035 second
77.9830553121303 KByte/s


OPTION ARITHMETIC NATIVE
OPTION CHARACTER BYTE
LET SEEK=0
FILE GETNAME F$
IF F$="" THEN STOP
OPEN #1:NAME F$
ASK #1: FILESIZE SIZE
CLOSE #1
PRINT "FILE SIZE=";SIZE;"Byte"
LET GETDATA$=REPEAT$(CHR$(0),SIZE+1)
LET T=TIME
LET K=GETBINARY(F$,SEEK,SIZE,GETDATA$)
LET L=TIME-T
PRINT L;"second"
IF K=0 THEN
   IF L>0 THEN PRINT SIZE/L/1024/1024;"MByte/s"
   !' FOR I=1 TO SIZE
   !'    PRINT RIGHT$("0"+BSTR$(ORD(GETDATA$(I:I)),16),2);" ";
   !'    IF MOD(I,16)=0 THEN PRINT
   !'    IF MOD(I,256)=0 THEN PRINT
   !' NEXT I
ELSE
   PRINT "READ ERROR!"
END IF
END

EXTERNAL FUNCTION GETBINARY(NAME$,SEEK,SIZE,DA$)
ASSIGN ".\DLL\fileread.dll","fileread"
END FUNCTION
-----------------------------------------------------------------------------------------
                                         fileread.c

#include <stdio.h>
__declspec(dllexport) int fileread(char *name,int offset,int size,char *data)
{
    FILE *fp;
    if ((fp = fopen(name, "rb")) == NULL) {
        return 1;
    }
    fseek(fp,offset,SEEK_SET);
    fread(data,size,1,fp);
    fclose(fp);
    return 0;
}


実行結果

FILE SIZE= 4784092 Byte
1.000000000931322575E-2 second
456.2465663475481961 MByte/s
 

戻る