2012-05-07 32 views
9

Đây là mã nhưng đã nhận lỗi:Nhận byte [] bằng ByteArrayInputStream từ một ổ cắm

bin = new ByteArrayInputStream(socket.getInputStream()); 

Có thể nhận byte[] sử dụng ByteArrayInputStream từ một ổ cắm?

+1

* "nhưng đã nhận lỗi:" * Got gì lỗi? Luôn sao chép/dán ngoại lệ và đầu ra lỗi vào câu hỏi (sử dụng thẻ mã). –

+0

Câu hỏi của bạn không có ý nghĩa. Một ByteArrayInputStream đọc các byte từ một mảng byte. Nếu bạn muốn đọc từ một ổ cắm, bạn không thể đọc từ một mảng byte. Bạn đang cố giải quyết vấn đề gì ở đây? – EJP

Trả lời

21

No. Bạn sử dụng ByteArrayInputStream khi bạn có một mảng byte và bạn muốn đọc từ mảng như thể đó là tệp. Nếu bạn chỉ muốn đọc mảng byte từ các ổ cắm, làm điều này:

InputStream stream = socket.getInputStream(); 
byte[] data = new byte[100]; 
int count = stream.read(data); 

Biến count sẽ chứa số byte thực sự đọc, và các dữ liệu của khóa học sẽ được trong mảng data.

7

Bạn không thể xem phiên bản ByteArrayInputStream bằng cách đọc trực tiếp từ ổ cắm.
Bạn cần đọc trước và tìm nội dung byte.
Sau đó, sử dụng nó để tạo một phiên bản ByteArrayInputStream.

InputStream inputStream = socket.getInputStream(); 

// read from the stream 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] content = new byte[ 2048 ]; 
int bytesRead = -1; 
while((bytesRead = inputStream.read(content)) != -1) { 
    baos.write(content, 0, bytesRead); 
} // while 

Bây giờ, vì bạn có baos trong tay, tôi không nghĩ bạn vẫn cần một ví dụ bais.
Nhưng, để làm cho nó hoàn chỉnh,
bạn có thể tạo ra dòng đầu vào mảng byte như sau

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
Các vấn đề liên quan