2014-06-20 2 views
0

내 Java 응용 프로그램 (퓨즈 파일 시스템)에서 모든 유형의 파일을 ByteBuffer로 읽어야합니다. 나는 다음과 같이 그것을했다 :ByteBuffer에서 다른 유형의 파일 읽기

public int read(final String path, final ByteBuffer buffer, final long size, final long offset, final FileInfoWrapper info) 
    { 

    Path p = Paths.get(path); 
    try { 
     byte[] data = Files.readAllBytes(p); 
     buffer.put(ByteBuffer.wrap(data)); 
     return data.length; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

만 * .txt 인 확장 파일이 제대로 을 읽기가 (내가 큰 * .txt 인 파일도 제대로을 읽을 수 있으며, 그 때문에 작은 크기의 생각). 나머지 파일 유형은 올바르게 읽히지 않습니다. 그것은

SEVERE: Exception thrown: java.nio.BufferOverflowException 
java.nio.DirectByteBuffer.put(DirectByteBuffer.java:357) 
java.nio.DirectByteBuffer.put(DirectByteBuffer.java:336) 
org.organization.upesh.FirstMaven.SFS_360.read(SFS_360.java:132) 
net.fusejna.LoggedFuseFilesystem$27.invoke(LoggedFuseFilesystem.java:437) 
net.fusejna.LoggedFuseFilesystem$27.invoke(LoggedFuseFilesystem.java:433) 
net.fusejna.LoggedFuseFilesystem.log(LoggedFuseFilesystem.java:355) 
net.fusejna.LoggedFuseFilesystem.read(LoggedFuseFilesystem.java:432) 
net.fusejna.FuseFilesystem._read(FuseFilesystem.java:234) 
net.fusejna.StructFuseOperations$23.callback(StructFuseOperations.java:260) 
sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:606) 
com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:455) 
com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:485) 

된 .txt * 이외의 파일을 읽는 또한 공정을 읽는 동안 이러한 오류가 발생합니다 매우 느립니다 파일 enter image description here

를 여는 동안

이러한 오류는 파일 유형에 따라 특정 응용 프로그램을 표시됩니다.

모든 유형의 파일을 올 바르고 정확하게 읽는 올바른 방법은 무엇입니까?

P. ByteBuffer에 파일을 읽는 것이 당신이 제안하는 솔루션이 무엇이든간에 반드시해야하며 또한 반드시 전송해야합니다. 전송 된 바이트 수를 반환합니다. FileChannel.map를 사용

+1

"올바르게 읽지 않음"이란 무엇을 의미합니까? 파일이 "정확하게"읽혔는지 어떻게 알 수 있습니까? 모든 파일은 단지 바이트 모음입니다. 텍스트 파일에는 특별한 것이 없습니다. – Jesper

+0

@Jesper. 내 응용 프로그램이 파일 시스템입니다. 나는 내 질문을 편집하고 파일을 여는 동안 각 파일 유형 응용 프로그램이 팝업하는 오류 그림을 추가했습니다. –

+1

문제가 있습니다. '심각 : 예외 발생 : java.nio.BufferOverflowException' 입력 버퍼가 데이터를 수용하기에 충분하지 않습니다. . 다른 .txt 파일과 동일한 크기의 큰 .txt 파일을 읽으면 똑같은 결과가 나옵니다. – user1071777

답변

1

what you're trying to implement의 기능 서명을 읽으십시오.

public int read(final String path, final ByteBuffer buffer, final long size, final long offset, final FileInfoWrapper info) 

당신이 볼 수있는 것처럼, size과 거기 offset 인수가 있습니다. 이 함수는 최대로 파일에서 size 바이트 수를 읽고 파일에서 오프셋 offset에서 읽어야합니다. 이 함수는 모든 것을 읽지 않아야합니다. provided example filesystem에는이를 수행하는 방법이 나와 있습니다.

관련 문제