기본적인 Java 문제는 다음과 같습니다. 청크별로 파일을 읽은 다음 청크의 순서를 반대로 변경 한 다음 새 파일에 기록해야합니다. 내 첫 (순진한) 시도는 다음 접근 방식을 따랐습니다.파일의 역 청크
- 파일에서 청크 읽기. 는
- 반복 새 파일에 대한 모든 덩어리
- 쓰기 결과 목록의 결과 목록의 앞에 한 번에 청크
- 푸시 바이트 하나의 바이트를 역
- .
기본적으로 이것은 매우 어리 석고 느린 방법으로 문제를 해결하지만 찾고자하는 올바른 출력을 생성합니다. 상황을 개선하려고,이 알고리즘 변경 :
- 배열 목록의 전면에 파일
- 푸시 청크에서 덩어리를 읽어들이는 모든 덩어리
- 의 foreach에 대한
- 반복 청크, 새 파일에 쓰기
내 생각에 똑같은 결과물이 나온다. 그것을 제외하고 나는 아주 혼란 스럽다. 결과 파일의 첫 번째 청크는 두 방법 모두와 일치하지만 나머지 파일은 완전히 다릅니다.
FileInputStream in;
FileOutputStream out, out2;
Byte[] t = new Byte[0];
LinkedList<Byte> reversed_data = new LinkedList<Byte>();
byte[] data = new byte[bufferSize];
LinkedList<byte[]> revd2 = new LinkedList<byte[]>();
try {
in = new FileInputStream(infile);
out = new FileOutputStream(outfile1);
out2 = new FileOutputStream(outfile2);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
while(in.read(data) != -1)
{
revd2.addFirst(data);
byte[] revd = reverse(data);
for (byte b : revd)
{
reversed_data.addFirst(b);
}
}
for (Byte b : reversed_data)
{
out.write(b);
}
for (byte[] b : revd2)
{
out2.write(b);
}
http://pastie.org/3113665에서 당신은 완벽한 예제 프로그램을 볼 수 있습니다 (긴 내 디버깅 시도 포함) : 여기
내가 사용하고있는 자바 코드의 고기입니다. 단순함을 위해 나는 모든 청크가 같은 크기가 될 수 있도록 파일의 크기를 균등하게 나누는 bufferSize를 사용하고 있지만 현실 세계에서는 그렇지 않습니다. 내 질문은 이러한 두 가지 방법으로 동일한 출력을 생성하지 않는 이유는 무엇입니까? 나는 그것을 마실 수 없기 때문에 나를 미치게 만든다.
숙제가 맞습니까? 나는 단지 문제의 더 큰 맥락이 무엇인지 궁금 할 뿐이다. – bobbymcr
첫 번째 아기가 신호 처리를 시작합니다. 데이터는 PCM 스트림입니다. – Segfault
그래서 혼란 스럽네요. 파일에서 모든 바이트를 역순으로 할당하는 것입니까, 아니면 청크의 순서를 바꾸는 것입니까? –