Java에서 메모리 만 사용하는 사용자 정의 파일 구현을 갖는 가장 쉬운 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/804814

  •  03-07-2019
  •  | 
  •  

문제

단일 데이터 객체를 나타 내기 위해 파일을 광범위하게 사용하는 코드베이스가 있습니다. 데이터 객체가 이제 기본 파일 시스템과의 상호 작용을 숨기는 명시 적 Java 객체가되도록 코드를 리팩토링했습니다. 그러나 파일을 읽고 쓰는 몇 가지 외부 도구 (Weka와 같은)를 사용합니다.

이상적으로는 읽기 또는 쓰기를 위해 Memory Bytes의 뒷받침되는 다른 라이브러리로 전달할 수있는 파일의 서브 클래스를 갖고 싶습니다.

내 Google 검색에서 메모리 매핑 파일을 찾았지만 파일 시스템에서 실제 파일을 원하지 않기 때문에 문제가되지 않습니다. 이미 솔루션이 있습니까? 아니면 서브 클래스 파일 만 직접 파일을하고 실제 파일 시스템을 참조하는 모든 방법을 과도하게 켜야합니까?

도움이 되었습니까?

해결책

이것이 일반적으로 파일을 실제로 필요로하지 않는 한 파일을 가져 오는 방법을 작성해서는 안되는 이유입니다. 라이브러리가 임의의 입력 스트림을 취하는 방법을 제공하지 않습니까? 이 경우, BytearrayInputStream 또는 메모리에서 읽는 입력 스트림을 통과시키는 것은 사소한 일입니다.

파일을 재정의하는 문제는 파일을 도울 수있는 방식으로 파일을 무시할 수 없다는 것입니다. 예를 들어, 라이브러리가 FileInputStream으로 개방하면 해당 시점에서 바이트가 나오는 곳은 파일이 아니라 FileInputStream 구현에 의해 실제로 제어됩니다.

다른 팁

java.io.File 본질적으로 주위의 래퍼입니다 String 파일 경로를 나타내는 ( final 수업, 그러나 거기에서 당신은 간다). 그래서 당신은 그 접근법에 운이 좋지 않습니다. 물론 "RAM 디스크"에서 임시 파일과 파일을 만들 수 있습니다.

오히려 출력 스트림/입력 스트림의 메모리 구현을 찾아야합니다. BytearRayoutputStream TobyTearRay () 메소드 또는 BytearrayinputStream 바이트 [] 생성자와 함께. 데이터가 더 복잡한 경우 인터페이스를 직접 구현할 수 있습니다.

타사에서 어떤 파일 방법을 사용하고 있는지 확인하고 사용자 지정 구현을 제공해야합니다.

java.io.file 객체가 파일 컨텐츠의 읽기/쓰기를 담당하지 않기 때문에 성공할 수 없다고 확신합니다.

가장 좋은 방법은 코드를 리팩터링하여 파일 객체에 의존하지 않고 해당 파일에 의해 반환 된 바이트 배열에서 의존하는 것입니다.

파일의 서브 클래스를 만드는 것이 가능합니다.

public class InMemoryFile extends File { 
    public InMemody() { 
         super( "/dev/null" );
    }
    // find out what methods should be overwritten ?????
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top