다음을 구현하려면 어떻게해야합니까? 여러 행에 텍스트가 포함될 바이트 배열을 처리해야합니다. 데이터의 평균 크기는 아마도 약 10 킬로바이트의 데이터가 될 것입니다.바이트 배열을 나누고 올바르게 다시 붙여 넣기
불특정 다수의 줄이 있으면 특별한 토큰 ("FIRSTSTRING")으로 시작하는 줄이 있습니다. 나중에 같은 파일의 어딘가에 특별한 토큰 ("SECONDSTRING")으로 시작하는 다른 행이 생깁니다. 첫 번째와 두 번째 줄이 모두 바이트 배열에 정의되어 있으면 두 번째 줄이 첫 번째 줄 대신 복사되어야합니다. 그런 다음 결과 바이트 배열을 반환해야합니다.
다음은 나의 첫 번째 시도입니다. 나는 복잡성을 줄이기 위해 그것을 리팩터링하지 않았다. 나는 신뢰성에 대해서도 관심이 있으며, 또한 성능에 대해서도 많이 우려하고 있습니다. 이 문제를 해결하기에는 너무 많은 방법이 있으며 판단에 필요한 경험이 부족합니다. 나는 이것에 대한 좋은 의견을 정말 고맙게 생각한다.
private byte[] handleHeader(final byte[] input) throws IOException {
// input
ByteArrayInputStream bais = new ByteArrayInputStream(input);
InputStreamReader isr = new InputStreamReader(bais);
BufferedReader brs = new BufferedReader (isr);
// output
ByteArrayOutputStream data = new ByteArrayOutputStream();
ByteArrayOutputStream after = new ByteArrayOutputStream();
String line=null;
String original=null;
String changeWith=null;
while ((line = brs.readLine())!=null) {
line+="\n";
if (line.startsWith("FIRSTSTRING")) {
original = line;
continue;
}
if (line.startsWith("SECONDSTRING")) {
changeWith = line;
continue;
}
if ("".equals(original)) {
data.write(line.getBytes());
} else {
after.write(line.getBytes());
}
}
if (changeWith!=null && original != null) {
changeWith+="\n";
data.write(changeWith.getBytes());
} else if (original != null){
data.write(original.getBytes());
}
after.writeTo(data);
return data.toByteArray();
}
무엇이 당신의 질문입니까? 이 방법이 당신이 원하는 방식으로 작동합니까? 리팩토링해야 할 것이 무엇인지 묻고 있습니까? 이것은 생산 시스템에서 진행되고 있습니까? 이 코드의 목적은 숙제입니까? – Zak
필자는 필요할 경우 제 3 자 웹 응용 프로그램 데이터를 다시 작성하기 위해 재사용 가능한 구성 요소를 고려 중입니다. 그것은 애완 동물 프로젝트입니다. 문제는 대부분 이런 식으로 데이터를 처리하는 것이 효율적이며 내 접근법이 건전한 지 여부에 관한 것입니다 ... 이런 종류의 물건으로 작업 한 사람은 나에게 몇 가지 힌트를 줄 수 있어야하며 나머지는 작업 할 수 있어야합니다. 이상한 인코딩 문제가 발생하거나 바보처럼 느려지는지 모르겠다. – user385797