2011-08-08 33 views
13

Tôi vẫn còn tương đối mới đối với ổ cắm và tôi chưa thấy bất kỳ thông tin nào về chủ đề này.Ổ cắm Java: DataOutputStream hoặc OutputStream?

Để ghi vào một ổ cắm kết nối, bạn có thể sử dụng

socket.getOutputStream().write 

Hoặc tạo một mới DataOutputStream từ các ổ cắm OutputStream và ghi vào đó.

  • Điều gì được coi là "thực hành tốt", sử dụng DataOutputStream hoặc OutputStream? Hầu hết các số the examples Tôi tìm thấy trên internet sử dụng DataOutputStream (để gửi Strings, chẳng hạn như trong một cuộc trò chuyện hai chiều).
  • Có bất kỳ ưu điểm hay nhược điểm nào khi sử dụng DataOutputStream trên OutputStream không?
  • Có sự khác biệt nào về hiệu suất đáng chú ý giữa hai ví dụ này khi gửi tệp không?

Trả lời

10

DataOutputStream đảm bảo dữ liệu được định dạng theo cách độc lập trên nền tảng. Đây là lợi ích lớn. Nó chắc chắn rằng các bên ở phía bên kia sẽ có thể đọc nó. Không có sự khác biệt về hiệu suất đáng kể giữa cả hai.

Bạn chỉ nên sử dụng OutputStream nếu bạn chuyển dữ liệu nhị phân thô.

+0

Vì vậy, bạn sẽ đề xuất điều gì nếu bạn muốn tạo một ứng dụng java độc lập nền tảng có thể gửi tệp? – David

+0

Ngay cả khi các tập tin chỉ chứa byte thô, bạn vẫn có thể gửi chúng với DataOutputStream, vì vậy tôi sẽ đi cho DataOuputStream trong mọi trường hợp. – JVerstry

+0

'DataOutputStream' only 'đảm bảo dữ liệu được định dạng theo cách độc lập nền tảng' nếu bạn sử dụng API bổ sung mà nó cung cấp. Các phương thức 'write()' của nó không có các thuộc tính phép thuật. Nếu bạn chỉ sử dụng chúng, (a) không có sự khác biệt về hiệu năng nào cả, và (b) không có điểm nào trong việc sử dụng 'DataOutputStream' chút nào. Nếu bạn đang sử dụng các API bổ sung thì không có gì để so sánh hiệu suất của nó với. Vì vậy, tuyên bố về sự khác biệt về hiệu suất về cơ bản là vô nghĩa. – EJP

2

Sử dụng DataOutputStream nếu bạn cần thêm API. Nếu bạn không, không có điểm. Nhưng bạn nên luôn luôn bọc luồng đầu ra của ổ cắm trong một BufferedOutputStream nếu bạn đang viết nhỏ và flush() khi thích hợp, tức là trước khi bạn đọc ổ cắm chẳng hạn.

-1

Bây giờ tôi đã biết sự khác biệt giữa dataoutputstream và outputstreamwriter khi làm việc với dịch vụ SOAP ... Tôi đã cố gắng chuyển dữ liệu arabic thông qua yêu cầu XML nhưng trong XML phản hồi, tôi nhận được một số ký tự rác thay cho arabic dữ liệu sau đó tôi đã cố gắng để mã hóa (UTF-8) yêu cầu nhưng không có phương pháp như vậy để mã hóa trong DataOutputStream nơi mà bạn có thể mã hóa các yêu cầu trong OutputStreamWriter trước khi gửi yêu cầu. OutputStreamWriter out = new OutputStreamWriter (con.getOutputStream(), "UTF-8"); out.write (inputXML);