たとえば、特定のURLからファイルをダウンロードしてファイルに保存したいみたいなケースですね。単純なのでその場で書いてしまうケースが多いですが、それをクラス化してみました。
// try-with-resourcesをサポートするためにjava.io.Closeableをインプリメント
public class StreamTransmitter implements Closeable {
final private InputStream input;
final private OutputStream output;
final int bufSize;
public StreamTransmitter(InputStream is, OutputStream os) {
input = is;
output = os;
bufSize = 2048;
}
public void transfer() throws IOException {
byte[] buf = new byte[bufSize];
int read;
while ((read = input.read(buf)) != -1) {
output.write(buf, 0, read);
}
output.flush();
}
@Override
public void close() throws IOException {
// 内包するStreamもCloseableなのでtry-with-resourcesでOK
try (InputStream in = input; OutputStream out = output;) {
}
}
}
public class StreamTransmitter implements Closeable {
final private InputStream input;
final private OutputStream output;
final int bufSize;
public StreamTransmitter(InputStream is, OutputStream os) {
input = is;
output = os;
bufSize = 2048;
}
public void transfer() throws IOException {
byte[] buf = new byte[bufSize];
int read;
while ((read = input.read(buf)) != -1) {
output.write(buf, 0, read);
}
output.flush();
}
@Override
public void close() throws IOException {
// 内包するStreamもCloseableなのでtry-with-resourcesでOK
try (InputStream in = input; OutputStream out = output;) {
}
}
}
このクラスを利用した例。
public static void main(String[] args) {
String in = "/temp/LICENSE.txt";
String out = "/temp/LICENSE_OUT.txt";
try (StreamTransmitter st = new StreamTransmitter(new FileInputStream(
in), new FileOutputStream(out))) {
st.transfer();
// try-with-resourcesなので、明示しなくてもOK
st.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
String in = "/temp/LICENSE.txt";
String out = "/temp/LICENSE_OUT.txt";
try (StreamTransmitter st = new StreamTransmitter(new FileInputStream(
in), new FileOutputStream(out))) {
st.transfer();
// try-with-resourcesなので、明示しなくてもOK
st.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
比較的簡単ですね。
0 件のコメント:
コメントを投稿