Tags:

Đọc ghi dữ liệu dưới dạng mảng byte trong java

ByteArrayInputStream(BIS) và ByteArrayOutputStream(BOS) cung cấp chúng ta cơ chế đọc ghi dữ liệu dưới dạng mảng byte.

ByteArrayInputStream trong java

BIS bên trong vận hành một mảng byte buffer (byte[]) để lưu trữ mảng byte được cung cấp tại constructor của BIS. Ngoài ra có còn quản lý hai biến khác là poscount. pos sử dụng để đánh dấu vị trí tiếp theo sẽ được đọc từ Input Stream trong khi count có giá trị bằng độ dài của mảng của mảng byte được truyền vào tại thời điểm khởi tạo, khi pos == count tất là các byte trong InputStream đã được đọc hết.

Constructor  

//to 0 and count is length of  bye bugger.
public ByteArrayInputStream(byte buf[]) {
 this.buf = buf;
 this.pos = 0;
 this.count = buf.length;
    }
//BIS buf is initialized with byte buffer passed, pos is offset and count is minimum 
//of length of  bye bugger or (offset + length). 
public ByteArrayInputStream(byte buf[], int offset, int length) {
 this.buf = buf;
 this.pos = offset;
 this.count = Math.min(offset + length, buf.length);
 this.mark = offset;
}

Ví dụ ByteArrayInputStream 

import java.io.*;

class ByteArrayInputStreamExample {

    public static void main(String[] args) throws IOException {
        byte[] byteArray = { 97, 98, 99, 78, 71, 100 };
        // pass byteArray input to InputStream handler
        InputStream is = new ByteArrayInputStream(byteArray);
        System.out.println("ByteStreamArray output");
        handleInputStream(is);
        is.close();
    }

    //generic method handling both FileInputStream and ByteInputStream
    private static void handleInputStream(InputStream is) {
        BufferedInputStream bis = new BufferedInputStream(is);
        // read each byte
        int readCount = 0;
        try {
            while ((readCount = bis.read()) != -1) {
                System.out.println((char)readCount);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Output:

ByteStreamArray output
a
b
c
N
G
d

ByteArrayOutputStream trong java

Bên trong BOS dùng mảng byte buffer(byte[] buffer) nơi chứa data ghi xuống. Mặc định kích thước của buffer là 32 và nó sẽ tự động tăng khi dữ liệu được ghi xuống ngày càng nhiều. Bạn cũng có thể thay đổi size của buffer bằng cách truyền size vào constructor.

constructor

public ByteArrayOutputStream(int size) {
 //byte buffer of length = size argument is created 
  buf = new byte[size];
}
public ByteArrayOutputStream() {
 //default size 32 byte buffer is created 
}

Ví dụ ByteArrayOutputStream

BOS thường được dùng để ghi dữ liệu chung xuống nhiều file. 

import java.io.*;

class ByteArrayOutputStreamExample {
    public static void main(String[] args) throws IOException {
        FileOutputStream fout1 = new FileOutputStream("f1.txt");
        FileOutputStream fout2 = new FileOutputStream("f2.txt");

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        bout.write(65);
        bout.writeTo(fout1);
        bout.writeTo(fout2);

        bout.flush();
        bout.close();// has no effect
        System.out.println("Success...");
    }
}

Sau khi chạy thành công thì chương trình sẽ tạo ra hai file f1.txt và f2.txt tại thư mục gốc của dự án và đều có cùng nội dung “A”. 

Nguồn tham khảo:

https://arstechnica.com/civis/viewtopic.php?f=20&t=63190

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x