2016-07-13 3 views
-2

고정 된 크기로 생성 된 스트림이 있습니다. 버퍼가 비어 있습니다. 이 버퍼의 크기를 가져올 수 있기를 원합니다. 이 일을하는 효율적인 방법은 무엇입니까?빈 "unwritten"스트림의 크기를 얻는 방법은 무엇입니까?

다음은 내가 한 것입니다.

static OutputStream CreateBuffer() 
{ 
    return (OutputStream) new ByteArrayOutputStream(100); 
} 

static int GetBufferSize(OutputStream out) 
{ 
    return ((ByteArrayOutputStream) out).size(); 
} 


public static void main(String[] args) 
{ 
    System.out.println(GetBufferSize(CreateBuffer())); 
} 

예상치는 100입니다. 나는 그것이 0 인 이유를 안다. - 스트림은 할당되었지만 실제로는 아무것도 아직 쓰여지지 않았다. 실제로 데이터를 복사하지 않고 빈 출력 스트림의 크기를 얻으려면 좋은 구현은 무엇입니까?

+1

당신이 100을 나가기를 원한다면 나는 당신이 요구하는 것이 불가능하다는 것을 확신합니다. 바닐라 ByteArrayOutputStream에 있지 않습니다. 악의적 인 반사 허커리지가 아닙니다. API는 특별히이 질문에 답하지 않도록 설계되었습니다. –

+1

질문에 답을 쓰지 마십시오. – shmosel

+0

그것은 실수였습니다.적절한 버전으로 업데이트하고 잘못된 버전을 추가했습니다. 수정 됨. 고맙습니다. – nikk

답변

1

당신은 ByteArrayOutputStream 하위 클래스 내부 버퍼 크기를 얻을 수 있습니다 :

private static class ByteArrayOutputStreamWithCapacity extends ByteArrayOutputStream { 
    public ByteArrayOutputStreamWithCapacity(int size) { 
     super(size); 
    } 

    public synchronized int capacity() { 
     return buf.length; 
    } 
} 

void CreateBuffer() 
{ 
    OutputStream out = new ByteArrayOutputStreamWithCapacity(100); 
} 

int GetBufferSize(OutPutStream out) 
{ 
    return ((ByteArrayOutputStreamWithCapacity) out). capacity(); 
} 
+0

고맙습니다. 내가 필요한 것. 건배. – nikk

+1

@nikk EJP의 대답에 설명되어 있듯이, 기술적으로 * 귀하의 질문에 대한 답변이지만, 실제로 이것이 필요한지 의심 스럽습니다. 덕분에 – shmosel

+0

. 대답은 내 문제를 해결합니다. 난 그냥 내 응용 프로그램에 대한 그 크기를 얻을 필요가 있었다. 고맙습니다. – nikk

1

나는 고정 된 크기로 생성되는 java.io.OutputStream 있습니다.

아니요. 0이 아닌 초기 용량으로 생성 된 ByteArrayOutputStream이 있습니다.

버퍼가 비어 있습니다. 나는이 버퍼의 크기를 얻을 수 있기를 원한다.

버퍼의 논리 크기는 0입니다. 버퍼의 초기 용량은 생성자에서 지정한 값과 동일합니다.

효율적인 방법은 무엇입니까?

생성자에서 지정한 내용을 기억하십시오. 당신은 제로를 기대한다

나는 100

를 기대합니다. Javadoc을 보라.

나는 그것이 0 인 이유를 안다 - 스트림은 할당되었지만 아직 실제로 아무것도 쓰여지지 않았다.

정확히. 그래서 당신은 왜 100이 수수께끼 일 것이라고 예상 했습니까?

데이터를 실제로 복사하지 않고 빈 출력 스트림의 크기를 얻으려면 좋은 구현은 무엇입니까?

'빈 출력 스트림의 크기'는 0입니다. ByteArrayOutputStream의 초기 용량은 구성 할 때 지정한 값입니다. 왜 당신이 이것을 필요하다고 생각하는지 분명하지 않습니다. 용량은 필요에 따라 효율적으로 변경됩니다. 당신은 '고정 크기'와 '초기 수용력'사이에 혼란스러워 보입니다. 당신이 지정한 것은 후자였습니다.

관련 문제