Java 中的输入输出(IO)操作是编程中非常重要的一部分。其中,Java IO 接口的输入部分(Input)提供了多种方式来读取数据,无论是从文件、网络连接还是其他数据源。
首先,让我们来了解一下 Java IO 接口中常用的输入流类。FileInputStream 是用于从文件中读取数据的输入流。它可以打开一个文件,并以字节为单位读取文件内容。以下是一个使用 FileInputStream 读取文件的示例代码:
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt")) {
int byteRead;
while ((byteRead = fis.read())!= -1) {
System.out.print((char) byteRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们使用 FileInputStream 打开名为“example.txt”的文件,并逐字节读取文件内容,然后将其打印到控制台。
另外一个常用的输入流是 BufferedInputStream。它可以为其他输入流添加缓冲功能,提高读取效率。当从文件或网络读取大量数据时,使用缓冲流可以显著减少实际的 I/O 操作次数。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputExample {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer))!= -1) {
System.out.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里我们将 BufferedInputStream 与 FileInputStream 结合使用,通过缓冲区读取文件内容,提高了读取效率。
除了从文件读取数据,Java IO 接口还可以用于从网络连接中读取数据。Socket 类提供了一种通过网络进行通信的方式。以下是一个简单的客户端程序,用于从服务器读取数据:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class NetworkInputExample {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8080);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
String line;
while ((line = reader.readLine())!= null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们创建一个与本地服务器建立连接的 Socket,并使用 BufferedReader 从输入流中读取服务器发送的数据。
在实际应用中,根据不同的需求选择合适的输入流类是非常重要的。如果需要读取文件,可以使用 FileInputStream 或其包装类。如果需要从网络连接中读取数据,可以使用 Socket 和相关的输入流。同时,合理使用缓冲流可以提高性能。
总之,Java IO 接口的输入部分提供了丰富的功能,可以满足各种不同的输入需求。通过正确选择和使用输入流类,我们可以高效地读取数据,为程序的功能实现提供有力支持。