2013-02-06 57 views
6

Gần đây tôi đã bắt đầu với Java và muốn hiểu một mô-đun java của một ứng dụng lớn. Tôi đã xem qua dòng mã java sau:BufferedReader và InputStreamReader trong Java

String line = (new BufferedReader(new InputStreamReader(System.in))).readLine(); 

Mã java này làm gì. Có một C/C++ tương đương này?

+4

Tại sao thẻ này được gắn thẻ C++ và C? –

+0

Trình bao bọc và trình bao bọc.Đọc javadoc của ['InputStreamReader'] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html) và [' BufferedReader'] (http://docs.oracle) .com/javase/7/docs/api/java/io/BufferedReader.html) trước tiên. –

+2

C++ tương đương sẽ gần bằng 'std :: string line; std :: getline (std :: cin, line), ' – jrok

Trả lời

9

System.in là đầu vào tiêu chuẩn.

InputStreamReader cho phép bạn kết hợp luồng đọc từ đầu vào được chỉ định (trong trường hợp này là đầu vào chuẩn), vì vậy bây giờ chúng tôi có luồng.

BufferedReader là một "trừu tượng" để giúp bạn làm việc với luồng. Ví dụ, nó thực hiện readLine thay vì đọc ký tự theo ký tự cho đến khi bạn tìm thấy '\ n' để lấy toàn bộ dòng. Nó chỉ trả về một String sau quá trình này.

Vì vậy, dòng này có nghĩa là: "Đọc một dòng từ đầu vào tiêu chuẩn và lưu trữ nó trong line biến".

1

Mã nào chỉ đơn giản là đọc một dòng từ luồng đầu vào. từ quan điểm mẫu, đây là một trang trí. Khi sử dụng BufferedReader là nhằm cải thiện hiệu năng IO.

+2

Sử dụng BufferedReader là cho phương thức' readLine() ', không tồn tại trong InputstreamReader. – davmac

4

Đoạn mã của bạn sử dụng BufferedReader, bị xích vào InputStreamReader, để đọc aline từ bảng điều khiển nhập chuẩn và lưu nó vào dòng Chuỗi.

BufferedReader

đọc văn bản từ một dòng ký tự đầu vào, bộ đệm ký tự để cung cấp cho việc đọc hiệu quả của các nhân vật, mảng, và dòng. Kích thước bộ đệm có thể được chỉ định hoặc kích thước mặc định có thể được sử dụng. Mặc định là đủ lớn cho hầu hết các mục đích. Nói chung, mỗi yêu cầu đọc được thực hiện của một Reader gây ra một yêu cầu đọc tương ứng được thực hiện của các ký tự cơ bản hoặc dòng byte. Do đó, nên quấn một BufferedReader xung quanh bất kỳ Reader nào có hoạt động read() có thể tốn kém, chẳng hạn như FileReaders và InputStreamReaders.

BufferedReader # readLine()

Đọc một dòng văn bản. Một dòng được coi là chấm dứt bởi bất kỳ một trong một dòng feed ('\ n'), một vận chuyển trở lại ('\ r'), hoặc một vận chuyển trở lại theo sau ngay lập tức bởi một linefeed.

InputStreamReader

Một InputStreamReader là một cây cầu từ suối byte để dòng nhân vật: Nó đọc byte và giải mã chúng thành các nhân vật sử dụng một charset quy định. Bộ ký tự mà nó sử dụng có thể được chỉ định theo tên hoặc có thể được cung cấp rõ ràng hoặc bộ ký tự mặc định của nền tảng có thể được chấp nhận. Mỗi lời gọi của một trong các phương thức read() của InputStreamReader có thể gây ra một hoặc nhiều byte được đọc từ luồng đầu vào byte cơ bản. Để cho phép chuyển đổi hiệu quả các byte thành ký tự, nhiều byte hơn có thể được đọc trước từ luồng cơ bản hơn là cần thiết để đáp ứng hoạt động đọc hiện tại.

Hệ thống

Hệ thống lớp chứa một số lĩnh vực lớp học hữu ích và phương pháp. Nó không thể được khởi tạo.

Trong số các cơ sở được cung cấp bởi lớp Hệ thống là đầu vào tiêu chuẩn, đầu ra tiêu chuẩn và luồng đầu ra lỗi; truy cập vào các thuộc tính "được định nghĩa" bên ngoài; phương tiện tải tệp và thư viện; và phương pháp tiện ích để sao chép nhanh một phần của mảng.

System.in

Các "chuẩn" input stream. Luồng này đã mở và sẵn sàng cung cấp dữ liệu đầu vào. Thông thường luồng này tương ứng với đầu vào bàn phím hoặc nguồn đầu vào khác được chỉ định bởi môi trường máy chủ hoặc người dùng.

7

> What does this java code do:

String line là bạn string object

new BufferedReader().readLine() là trường hợp của một BufferedReader để đọc văn bản từ một dòng ký tự đầu vào; và readline() là phương pháp mà nó thực hiện để đọc cho đến khi ký tự dòng mới.

new InputStreamReader() cung cấp cho bạn phiên bản InputStreamReader là "cầu nối" giữa tiêu chuẩn trong luồng byte và luồng ký tự mà BufferedReader muốn.

System.in là đầu vào tiêu chuẩn (byte stream)


> Is there a C/C++ equivalent of this
Vâng ... không có ngôn ngữ được gọi là C/C++ ...;)
Vì vậy, tôi sẽ giả sử bạn muốn một câu trả lời cho mỗi người trong số họ.

Trong C, không có "dây", bạn phải sử dụng một mảng nhân vật, nhưng bạn có thể đọc dữ liệu vào một mảng ký tự từ stdin với một cái gì đó như:

char input[100]; 
... 
scanf("%99[^\n]", input); 

hoặc

fgets (input, 100 , stdin) 

Trong C++, bạn muốn sử dụng:

using namespace std; 

string line; 
getline(cin, line); 
1

Một InputStreamReader là một cây cầu từ các luồng byte đến các luồng ký tự: Nó đọc byte và giải mã chúng thành các ký tự bằng cách sử dụng một bộ ký tự được chỉ định. Bộ ký tự mà nó sử dụng có thể được chỉ định theo tên hoặc có thể được cung cấp rõ ràng hoặc bộ ký tự mặc định của nền tảng có thể được chấp nhận.

Mỗi lần gọi một trong các phương thức read() của InputStreamReader có thể gây ra một hoặc nhiều byte được đọc từ luồng đầu vào byte cơ bản. Để cho phép chuyển đổi hiệu quả các byte thành ký tự, nhiều byte hơn có thể được đọc trước từ luồng cơ bản hơn là cần thiết để đáp ứng hoạt động đọc hiện tại.

Để đạt hiệu quả cao nhất, chúng tôi xem xét gói một InputStreamReader trong BufferedReader. Ví dụ:

BufferedReader trong = BufferedReader mới (InputStreamReader mới (System.in));

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