Trong bài viết này mình sẽ hướng dẫn các bạn chuyển đổi từ InputStream sang mảng byte bằng thư viện Apache Commons IO các bạn nhé!
Trong thư viện Apache Commons IO có một lớp tên là IOUtils. Nó có chứa ba phương thức giúp chúng ta có thể chuyển đổi dễ dàng từ InputStream sang mảng byte. Đó là:
1 |
IOUtils.toByteArray(InputStream is); |
Phương thức này được dùng trong trường hợp bạn không biết kích thước của tập tin mà chỉ biết InputStream của nó.
1 |
IOUtils.toByteArray(InputStream is, int size); |
Chúng ta sẽ dùng phương thức này khi biết được kích thước của tập tin, tất nhiên là cả InputStream của tập tin đó nữa.
1 |
IOUtils.toByteArray(InputStream is, long size); |
Phương thức này giống phương thức thứ hai mà mình đã đề cập nhưng ở đây thay vì kích thước của tập tin được tính bằng int thì chúng ta sẽ tính bằng long.
Trong bản thân của phương thức thứ ba, nó cũng gọi lại phương thức thứ hai. Dưới đây là đoạn code của nó:
1 2 3 4 5 6 7 |
public static byte[] toByteArray(InputStream input, long size) throws IOException { if (size > Integer.MAX_VALUE) { throw new IllegalArgumentException("Size cannot be greater than Integer max value: " + size); } return toByteArray(input, (int) size); } |
OK, bây giờ chúng ta thử sử dụng hai phương thức đầu để chuyển đổi InputStream của một tập tin sang mảng byte như thế nào nhé!
Phương thức đầu:
1 2 3 4 5 |
File file = new File("F:\\HOC-TIENG-ANH-BANG-HINH-HOCHOC.COM.zip"); InputStream is = new FileInputStream(file); long start = System.currentTimeMillis(); IOUtils.toByteArray(is); System.err.println(System.currentTimeMillis() - start); |
Kết quả:
1 |
629 |
Phương thức thứ hai:
1 2 3 4 5 |
File file = new File("F:\\HOC-TIENG-ANH-BANG-HINH-HOCHOC.COM.zip"); InputStream is = new FileInputStream(file); long start = System.currentTimeMillis(); IOUtils.toByteArray(is, file.length()); System.err.println(System.currentTimeMillis() - start); |
Kết quả:
1 |
392 |
Rõ ràng nhìn vào thời gian thực thi của hai phương thức trên, mình nghĩ chúng ta nên sử dụng phương thức thứ hai, phải không các bạn?