Tôi muốn biết cách tạo bản sao sâu của InputStream
.Cách tạo bản sao sâu của InputStream trong Java
Tôi biết rằng nó có thể được thực hiện với các gói IOUtils, nhưng tôi muốn tránh chúng nếu có thể. Có ai biết một cách khác không?
Tôi muốn biết cách tạo bản sao sâu của InputStream
.Cách tạo bản sao sâu của InputStream trong Java
Tôi biết rằng nó có thể được thực hiện với các gói IOUtils, nhưng tôi muốn tránh chúng nếu có thể. Có ai biết một cách khác không?
InputStream là trừu tượng và không hiển thị (không làm con cái của nó) đối tượng dữ liệu nội bộ. Vì vậy, cách duy nhất để "sao chép sâu" InputStream là tạo ByteArrayOutputStream và sau khi thực hiện read() trên InputStream, write() dữ liệu này vào ByteArrayOutputStream. Sau đó, hãy thực hiện:
newStream = new ByteArrayInputStream(byteArrayOutputStream.toArray());
Nếu bạn đang sử dụng mark()
trên InputStream thì thực sự bạn không thể đảo ngược điều này. Điều này làm cho luồng của bạn "tiêu thụ".
Để "sử dụng lại" InputStream của bạn, hãy tránh sử dụng dấu() và sau đó ở cuối kết thúc cuộc gọi đọc(). Sau đó, bạn sẽ đọc từ đầu luồng.
được sửa đổi:
BTW, IOUtils sử dụng đoạn mã này đơn giản mã để sao chép InputStream:
public static int copy(InputStream input, OutputStream output) throws IOException{
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
Read more: http://kickjava.com/src/org/apache/commons/io/CopyUtils.java.htm#ixzz13ymaCX9m
bạn thường sử dụng DEFAULT_BUFFER_SIZE với phương pháp này? –
Tại sao bạn muốn làm điều đó? Afaik bạn không thể đọc hai lần từ một luồng. – thejh
Vì một số lý do kỳ lạ, tôi nghĩ luồng của tôi sẽ bị tiêu hao sau khi sử dụng. Vì vậy, để làm cho sur đó không phải là trường hợp tôi muốn thực hiện một bản sao sâu. Tôi đang làm việc với android và nhận được hình ảnh từ một webservice bằng cách sử dụng kiến trúc REST. – Spredzy
Tại sao bạn không hiển thị cho chúng tôi mã có liên quan và giải thích sự cố thực tế bạn đang gặp phải? –