2012-08-30 3 views
2

DataInputStream에서 많은 수의 int를 읽고 배열로로드하는 방법을 찾고 있습니다. 얼마나 많은 사람들이 읽을 필요가 있는지 정확히 알고 있습니다 만 단순히 반복하는 것보다 깨끗한 방법이 있다면 좋을 것입니다.DataInputStream에서 int [] 읽기

DataInputStream#read(byte[]) 메서드를 사용하여 바이트 배열로이 작업을 수행하는 방법이 이미 있지만 int[]에 해당하는 방법은 없습니다. 나는 4로 곱한 길이의 바이트 배열을 생성하여 바이트 배열로 데이터를 읽을 수 있지만 실제로는 int에 데이터가 필요합니다.

내가 볼때, 세 가지 가능성은 내가 사용할 수있다 :

  1. 은 어떻게 든 int[]에 직접 데이터를로드합니다.
  2. 어떻게 든 byte[]int[] 개로 변환합니다.
  3. 배열을 반복하고 readInt() 만 사용하십시오.

첫 번째 두 가지 해결 방법이 훨씬 더 좋지만 현재는 그 중 하나를 수행하는 방법을 알지 못합니다. 반복없이 이것을 할 수있는 간단한 방법이 있습니까?

+0

루프에서 readInt()가 제대로 작동해야합니다. 올바르게 열렸을 경우, 오버 헤드가 최소가되도록 (듯이) DataInputStream를 버퍼링 할 필요가 있습니다. –

+0

@HotLicks 그 일을 내가 끝내는 수도 있습니다. 내 응용 프로그램이 아마도 File IO를 많이 수행 할 것이므로 가능한 한 빨리 코드의 특정 비트를 좋아할 것입니다. –

+0

만약 당신이 nio에 들어 가지 않는다면 (심지어 거기에있다면), 또는 네이티브 메소드를 쓰면 메모리 배열 I/O를 할 수 없기 때문에 int 배열에 직접 쓸 수 있습니다. –

답변

1

이렇게하는 유일한 방법은 단순한 for 루프와 readInt()을 사용하는 것입니다. 이것은 내가 결국하기로 결정한 것입니다.

+0

많은 정수를 읽는 더 효과적인 방법을 찾지 못하셨습니까? 나는 정수에서만 ocnsists 이진 파일을 가지고, 수백만 정수가 있습니다. 'readInt'를 사용하는 while 루프가 최선의 선택입니까? 추신 필요한 경우 파일 형식을 변경할 수있는 이진 파일이 나에 의해 형성됩니다. –

0

ByteBuffer을 사용하면 데이터를 OS 메모리에 남겨 둘 수 있으므로 꽤 빨리 읽을 수 있습니다. 또한 getInt() 메서드가있어서 정수를 직접 읽고 배열에 넣을 수 있습니다.

+0

DataInputStream에서 더 많은 오버 헤드와 readInt()가 될 것입니다. –

+1

또 다른 문제는, 실제로이 int 배열 그 이상을 위해 실제로'DataInputStream'을 사용하고 있다는 것입니다. 이것은 데이터의 일부일뿐입니다. 내가해야 할 일의 양을 크게 늘리지 않고서도 다른 접근법을 찾을 수는 없습니다. –

+0

@ JakeKing DataInputStream을 사용하면 최선의 옵션은'readInt()'와 함께 루프를 사용하는 것입니다. BufferedInputStream도 사용하고 있는지 확인합니다. ;) –

관련 문제