2014-09-20 4 views
-4

2.6GB, 32 비트 부호있는 정수의 이진 파일, 100 개의 요소가 각 행입니다. 그때 어떻게 그것을 할, 초기 504 선을 읽지 않고 단지 505 라인을 읽을하고자하는 경우큰 데이터 파일의 일부를 Python, C 또는 Java로 읽는 방법?

DataInputStream dis = new DataInputStream(new FileInputStream("input.rawdata")) 
for(int i = 0; i < 100; i++){ 
    int idata = dis.readInt(); 
    % DO THE NECESSARY TO LOAD idata IN A VARIABLE ARRAY % 
} 
dis.close(); 

그러나 :

나는 자바에서 라인별로 라인을 읽을 수 있습니까?

데이터가 100 x 1000 행렬이고 15-80 번째 행 & 100 - 200 번째 열의 사각형 만 읽으려는 경우. 위의 세 가지 언어 (바람직하게는 Python & Java) 중 하나에서이 작업을 수행하는 방법.

코드 효율성과 관련된 제안 사항을 매우 환영합니다. 속도 측면에서

#define FILESIZE [file size in bytes] 
#define NUMROWS [number of rows] 
#define NUMCOLS [number of columns] 
#define cnk_size(X,Y) (X*Y) 
#define ENDROW [desired ending row] 
#define SRTROW [desired starting row] 
#define ENDCOL [desired ending col] 
#define SRTCOL [desired starting col] 


void* data = malloc(FILESIZE*sizeof(unsigned char)); 
fgets((char*)data,FILESIZE,stdin); 

void* chunk = malloc(sizeof(unsigned char)*cnk_size(ENDROW-SRTROW,ENDCOL-SRTCOL)); 

register i = SRTROW; 
register j = SRTCOL; 

register datptr = (unsigned int)data; 
register cnkptr = (unsigned int)cnkptr; 

for(i = SRTROW; i < ENDROW; i++) 
    for(j = SRTCOL; j < ENDCOL; j++) 
     *((char*)cnkptr++) = *((char*)(datptr + i*NUMCOL + j)); 

아마 최적화를위한 루프의 제거하지만 이것보다 훨씬 더 빨리 못하고, 및 수 : C에서

+1

MMAP를 원하십니까? – vaultah

+3

'fseek()'를 읽고 거기서 가져 가라. – NPE

+0

2 진 파일의 행의 의미는 무엇입니까? –

답변

0

, 당신은 파일의 크기 (바이트), 같은 뭔가를 알고 제공 java/python 아마 가까이 오지 않을 것이다. (fgets()에 의해 매우 잘 어울린다). 프로그램에 파일을 전달하려면 : https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html 출처 : 내 녹슨 풀링 할당

bash -$$ .\your-program-name < your-file-name 

당신이 메모리에 전체 파일을로드 분할 호출을 조회하지 않으려면

.