Java에서 메모리 만 사용하는 사용자 정의 파일 구현을 갖는 가장 쉬운 방법은 무엇입니까?
문제
단일 데이터 객체를 나타 내기 위해 파일을 광범위하게 사용하는 코드베이스가 있습니다. 데이터 객체가 이제 기본 파일 시스템과의 상호 작용을 숨기는 명시 적 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 ?????
}