2010-05-24 29 views
7

Như tôi biết cả hai lỗi và sai đều thuộc cùng một lớp PrintStream. Ai có thể cho tôi biết chúng khác nhau như thế nào ... làm thế nào họ thay đổi hành vi của họ?sự khác biệt giữa system.out và system.err

+0

http://en.wikipedia.org/wiki/Standard_streams – stacker

Trả lời

3

Chúng đi tới các luồng stdout và stderr tương ứng. Trên hầu hết các hệ điều hành, chúng đều khác biệt và có thể được gửi đến các địa điểm khác nhau. Ví dụ, điều này có thể hữu ích nếu đầu ra của chương trình của bạn được phân tích bởi chương trình khác - nếu cần báo cáo lỗi, stderr thường là nơi tốt hơn vì bạn có thể thiết lập nó để thu hút sự chú ý của con người.

12

Sự khác biệt không rõ ràng bởi vì theo mặc định trong hầu hết các hệ điều hành chúng được ghi vào bàn điều khiển (cùng một tệp, bảng điều khiển cũng là một tệp). Tuy nhiên, bạn có thể có System.out ghi vào một tệp và System.err ghi vào bảng điều khiển (màn hình) - đây chỉ là một kịch bản.

Viết một chương trình mà phát ra cả hai thông điệp System.out và System.err, và cố gắng này:

java MyProgram > out.txt 2> err.txt # On a *NIX. 

System.out thông điệp sẽ đi đến out.txt và System.err thông điệp sẽ để err.txt. Điểm cơ bản cần nhớ là nghĩ về System.out và System.err dưới dạng các luồng tới các tệp (đó là những gì chúng) thay vì một cơ chế để xuất ra trên màn hình, đó là những gì tôi cho là một người mới bắt đầu.

+3

+1 cho ví dụ chuyển hướng. –

2

Chúng có cùng hành vi. Nhưng đầu tiên (ra) là một tham chiếu đến dòng đầu ra tiêu chuẩn (theo mặc định nó là một giao diện điều khiển). Và thứ hai (err) là một tham chiếu đến luồng lỗi tiêu chuẩn (theo mặc định nó là một giao diện điều khiển quá).

Nhưng nếu muốn, bạn có thể thay đổi tham chiếu hoặc bạn có thể thêm trình bao bọc/bộ lọc cho từng bộ lọc.

IDE của tôi, ví dụ, hiển thị đầu ra từ err luồng có màu đỏ.

0

System.out gửi đầu ra tới luồng đầu ra tiêu chuẩn. System.err gửi đầu ra tới luồng lỗi chuẩn. Theo mặc định cả hai đều ghi vào bàn điều khiển.

Tuy nhiên, lợi ích là hai luồng có thể được chuyển hướng để bạn có thể có đầu ra system.out được chuyển hướng đến tệp nhật ký bình thường của mình và bạn có thể có đầu ra System.err được chuyển hướng đến nhật ký lỗi.

Các vấn đề liên quan