내 원래 question about RSA and Base64 encoding 및 그 주석을 기반으로 Base64OutputStream (또는 Input Stream)을 작성하는 최선의 방법이 무엇인지 궁금합니다. 원래는 Base64PrintWriter라고하고 PrintWriter에서 PrintWriter를 전달하여 생성자로 확장했습니다. Java, Base64 : Decorator 패턴을 사용하여 Base64OutputStream 클래스를 작성하는 방법
import org.bouncycastle.util.encoders.Base64;
public class Base64OutputStream extends FilterOutputStream {
public Base64OutputStream(OutputStream out) {
super(out);
}
public void write(byte[] decodedBytes) throws IOException {
byte[] base64Message = Base64.encode(decodedBytes);
super.write(base64Message);
}
public void writeln(byte[] decodedBytes) throws IOException {
write(decodedBytes);
super.write("\n".getBytes());
super.flush();
}
}
나는 위의 하나에 내 원래의 구현을 변경하고 나는 그것을 초기화 :
Base64OutputStream base64encoder = new Base64OutputStream(socket.getOutputStream());
내 질문
은 다음과 같습니다- 이 좋은 디자인인가?
- 더 잘 할 수 있습니까?
- 데코레이터 패턴을 올바르게 적용 했습니까?
- OutputStream 대신 FilteredOutputStream을 확장하는 것이 좋습니까? Oracle은 좋음을 나타내지 만 여전히 OutputStream에서 확장해야하는 단점이나 이유가 있습니까?
- 생성자를 호출 할 때 BufferedOutputStream을 추가로 꾸며야합니까?
안녕 lanoxx, 당신은 다른 질문에 디자인에 대한 의견을달라고 부탁했습니다. 내가 말했듯이 개인적으로 Writer 을 부모 (인코더)로 사용하는 것이 문자 인코딩 실수를 더 어렵게 만듭니다 (예 : UTF-16 문자가 포함 된 스트림에 쓰는 경우). 그렇지 않으면 Brent Wordens가 아파치 인터페이스 (예 : 줄 바꿈 처리)에 응답하고 복사하는 것을 권장합니다. 그로 인해 부족한 부분 중 하나는 적절한 예외 처리이며,이를 해결하려고 할 수 있습니다. 원하는 경우 Java 1에 대한 상태 기반 구현을 붙여 넣을 수 있습니다.5 이상. –