以下是一个不借助字节数组的方法来复制InputStream的示例代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class InputStreamCopyExample {
public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
public static void main(String[] args) {
try {
InputStream input = System.in;
OutputStream output = System.out;
copy(input, output);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例代码定义了一个静态方法copy
,接受一个输入流inputStream
和一个输出流outputStream
作为参数。它使用一个4096字节的缓冲区来逐个字节地从输入流中读取数据,并将其写入输出流中。
在main
方法中,我们将标准输入流System.in
作为输入流,并将标准输出流System.out
作为输出流传递给copy
方法。这将导致从标准输入读取数据,并将其复制到标准输出。
请注意,这种方法对于大文件可能效率不高,因为它在内存中保留了一个固定大小的缓冲区。对于大型文件,更好的方法是使用字节数组来复制数据。