2012-01-22 2 views
1

안녕하십니까. 파일 끝에 x 바이트를 어떻게 효율적으로 제거 할 수 있을지 궁금합니다. (추가 연산의 역 연산)파일을 "자르기"(꼬리에서 x 바이트를 제거하는) 효율적인 방법이 있습니까?

원본 파일에서 바이트를 읽고 새 파일에 쓰는 것은 특히 파일이 거대한 경우에 (빠른) 제대로되지 않는 것 같습니다.

file length을 설정할 수있는 방법이 있습니까?

아니면 파일을 "자르기"위한 최선의 방법은 무엇입니까?

+0

OS가이 같은 파일 잘라 내기를 관리하고 (외부 호출자가 커널의 일부가 될 수있는 함수에 액세스 할 수 있도록 허용하는 경우)에만 OS가이 파일을 관리하는 경우에만 새 파일에 쓰기 만해도된다고 생각합니다. – Adrian

답변

2
+1

내용을 새 파일로 다시 쓰지 않습니까? – Adrian

+0

왜해야합니까? 설명서에는 파일이 잘린 상태로 표시되어 있는데 정확히 무엇이 요청되는지 나타냅니다. – tzaman

+0

예, 잘라 버렸지 만, Pacerier는 파일이 디스크의 다른 부분에 다시 쓰여지지 않도록하고 싶습니다. (필자의 이해) 바이트는 같은 위치에 있어야합니다. 잘린 바이트는 HDD에 여유 공간으로 표시되어야합니다. 이러한 가정을 감안할 때 setLength()가 호출 될 때 모든 JVM 구현이이 작업을 수행 할 것이라고 주장 할 수 있는지 확신 할 수 없다. 단지 내 생각이다. 내가 잘못 해석 할 수있다 – Adrian

1

나는 당신이 답을 가지고있다.

  • 수동 읽기, 잘라 내기, 파일을 다시 작성하고 싶지 않지만, tzaman는 지적 장면 뒤에 발생할 수있는 이러한 작업, 당신은 setLength(..)를 사용할 수있는 경우에 당신이 상관하지 않는 경우.

  • 파일의 바이트를 새로운 디스크 위치에 다시 쓰지 않으려면 (끝에있는 바이트를 디스크에서 자유롭게 표시 (부작용 : 조각화) 만하면 됨), I 그것이 가능하다고 생각하지 마십시오. 기본 운영 체제가 (하드웨어와의 대화를 통해) 이와 같은 파일 잘라 내기를 구현하는지 확인해야합니다. 나는 그런 옵션에 익숙하지 않다. 게다가 다른 JVM 구현이 존재하며 코드가 어떻게 뒷부분에서 실행되는지에 대한 보장이 없습니다.

후자의 접근법에서 가장 큰 문제는 디스크의 단편화이지만. 운영 체제는 전체적으로 어딘가에서 다시 작성되는 경우 파일을 구성하는 데 더 좋은 방법이 될 수 있습니다. 그러나 그것은 달려있다. 어쩌면이 특정 응용 프로그램에 대한 자신의 OS를 작성할 수 있습니다. ;)

+0

"자체 OS"를 쓰는 것은 무엇을 의미합니까? – Pacerier

+0

@Pacerier 잘 완성을 위해 저기에 던져 버렸습니다 ...이 기능 (파일 잘라내 기가 빠름)이 정말로 필요한 경우 잘라내기를 원하는 방식으로 자신의 OS를 작성하십시오. 그런 다음이 OS에서 JVM을 실행하면, truncate() 함수로 OS가 필요한 것을 수행 할 수 없습니다. – Adrian

+0

그게 내가 이해 못하는거야. 어떻게하면 자바 코드를 실행하는 윈도우에서 truncate()를 수행하는 데 도움이됩니까? – Pacerier

관련 문제