내 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 * 이외의 파일을 읽는 또한 공정을 읽는 동안 이러한 오류가 발생합니다 매우 느립니다 파일
를 여는 동안
이러한 오류는 파일 유형에 따라 특정 응용 프로그램을 표시됩니다.
모든 유형의 파일을 올 바르고 정확하게 읽는 올바른 방법은 무엇입니까?
P. ByteBuffer에 파일을 읽는 것이 당신이 제안하는 솔루션이 무엇이든간에 반드시해야하며 또한 반드시 전송해야합니다. 전송 된 바이트 수를 반환합니다. FileChannel.map를 사용
"올바르게 읽지 않음"이란 무엇을 의미합니까? 파일이 "정확하게"읽혔는지 어떻게 알 수 있습니까? 모든 파일은 단지 바이트 모음입니다. 텍스트 파일에는 특별한 것이 없습니다. – Jesper
@Jesper. 내 응용 프로그램이 파일 시스템입니다. 나는 내 질문을 편집하고 파일을 여는 동안 각 파일 유형 응용 프로그램이 팝업하는 오류 그림을 추가했습니다. –
문제가 있습니다. '심각 : 예외 발생 : java.nio.BufferOverflowException' 입력 버퍼가 데이터를 수용하기에 충분하지 않습니다. . 다른 .txt 파일과 동일한 크기의 큰 .txt 파일을 읽으면 똑같은 결과가 나옵니다. – user1071777