문제

나는 여기서 약간 혼란스러워합니다.

나는 다음과 같은 일을하고 싶습니다 :

  1. 내가 쓸 수있는 일종의 버퍼를 만듭니다
  2. 버퍼를 지 웁니다
  3. printf ()-기능을 여러 번 사용하여 한 번만하고 싶은 복잡한 계산을 기반으로 버퍼에 많은 물건을 추가하십시오.
  4. 버퍼의 내용을 사용하여 여러에 인쇄하십시오. PrintStream 사물
  5. 필요에 따라 2-4 단계를 반복하십시오

예 :

SuperBuffer sb = new SuperBuffer();
  /* SuperBuffer is not a real class, so I don't know what to use here */
PrintStream[] streams = new PrintStream[N];
/* ... initialize this array to several streams ... */

while (!done)
{
    sb.clear();
    sb.printf("something %d something %d something %d", 
        value1, value2, value3);
    if (some_complicated_condition())
        sb.printf("something else %d something else %d", value4, value5);
    /* ... more printfs to sb ... */
    for (PrintStream ps : streams)
        ps.println(sb.getBuffer());
}

포장 된 것 같습니다 인쇄기 주위에 StringWriter 내가 원하는 것을 할 것입니다 sb 아니오가없는 경우를 제외하고 위의 물체 clear() 방법. 나는 루프를 통해 매번 새로운 인쇄기와 StringWriter 객체를 만들 수 있다고 생각하지만 그것은 고통처럼 보입니다. (내 실제 코드에서 나는 한 번의 루프에서 한 번만가 아니라 여러 곳 에서이 작업을 수행합니다 ...)

나도 사용했습니다 java.nio.CharBuffer 그리고 다른 nio 버퍼는 많이 버려지고 유망한 접근 방식처럼 보이지만 어떻게 나에게 줄 물건으로 그들을 감싸는 지 잘 모르겠습니다. printf() 기능.

어떤 충고?

도움이 되었습니까?

해결책

아 : 나는 그것을 가지고 있다고 생각한다. 그만큼 Formatter 클래스는 a format() 방법입니다 printf(), 그리고 그것은 구현하는 모든 종류의 물체를 감싸도록 구성 될 수 있습니다. Appendable. CharBuffer 구현 Appendable, 그리고 나는 할 수있다 clear() 또는 내용을 읽으십시오 CharBuffer 필요에 따라.

다른 팁

루프에 새로운 버퍼를 만드는 것이 왜 고통입니까? 그것이 쓰레기 수집가가있는 것입니다. 어쨌든 Clear ()의 표지 아래에 새로운 할당이 필요합니다.

당신이 정말로 당신의 슈퍼 버퍼를 구현하고 싶다면 그렇게 어렵지 않을 것입니다. Clear () 함수로 OutputStream의 서브 클래스를 작성한 다음 그 주위에 인쇄물을 감싸십시오. 원하는 경우 슈퍼 버퍼에 charbuffer를 사용할 수 있습니다.

스트림과 대의원을 보유하는 outputStream (또는 Writer)의 서브 클래스, teeoutputStream을 만드는 것을 고려하십시오. 그런 다음 PrintStream (또는 Printwriter)으로 스트림을 감싸고 printf ()를 호출하십시오. 임시 버퍼 나 그 밖의 어떤 것도 필요하지 않습니다.

PrintStream[] streams = new PrintStream[N]; // any output streams really
PrintStream ps = new PrintStream(new TeeOutputStream(streams));

while (!done)
{
    ps.printf("something %d something %d something %d",
              value1, value2, value3);    
    if (some_complicated_condition())
        ps.printf("something else %d something else %d", value4, value5);
    ps.println();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top