나는 내 앞에 코드가 없지만 몇 년 전 비슷한 프로젝트에서 뭔가가있다.
나는 그들이 읽은 바이트 수와 카운터를 증가 할 수 있도록 모든
read()
방법을 재 구현, 내가
openInputStream()
에서 다시받은
InputStream
객체 감싸
InputStream
의 서브 클래스를 썼다. 카운터가 특정 임계 값에 도달 할 때마다 서브 클래스의 생성자로 전달 된
GaugeField
객체를 업데이트합니다.
그래서 서브 클래스는 다음과 같이 보일 것이다 :
public GaugedInputStream extends InputStream
{
private InputStream _inputStream = null;
private GaugeField _gaugeField = null;
private int _counter = 0;
private int _threshold = 0;
public void GaugedInputStream(InputStream inputStream, GaugeField gaugeField)
{
_inputStream = inputStream;
_gaugeField = gaugeField;
... other constructor stuff ...
}
public int read()
{
int byte = _inputStream.read();
increment(1);
return byte;
}
public int read(byte[] b)
{
int bytes = _inputStream.read(b);
increment(bytes);
return bytes;
}
public int read(byte[] b, int off, int len)
{
int bytes = _inputStream.read(b, off, len);
increment(bytes);
return bytes;
}
... override other InputStream methods here ...
private void increment(int bytes)
{
_counter = _counter + bytes;
_threshold = _threshold + bytes;
updateGaugeIfNeeded();
}
private void updateGaugeIfNeeded()
{
if (_threshold > 100)
{
updateGauge();
_threshold = 0;
}
}
private void updateGauge()
{
... code to update the gauge ...
}
}
내가 여기에 많은 내장을 떠날거야,하지만 나는 이것이 올바른 방향을 설정 바랍니다.
감사합니다. curt이 코드를 사용해 보겠습니다. – Vivart