Java中的输入输出流可以用于读写各种类型的数据,可以用于很多场景,如文件读写、网络通信、图像处理等。以下是一些常见的使用场景和对应的输入输出流用法:
文件读写:使用FileInputStream/FileOutputStream或FileReader/FileWriter等类对文件进行读写。比如读取文件内容、写入文件内容、复制文件等。
try {
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
int content;
while ((content = fis.read()) != -1) {
System.out.print((char) content);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
2.文件写入
try {
File file = new File("test.txt");
FileOutputStream fos = new FileOutputStream(file);
String content = "Hello, Input/Output Stream!\n";
fos.write(content.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
网络通信:使用Socket类创建网络通信客户端或服务端,使用InputStream/OutputStream或Reader/Writer等类进行数据的读写。比如发送和接收数据、构建客户端和服务器等。
3.网络通信(服务端)
try {
ServerSocket serverSocket = new ServerSocket(12345);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = is.read(buffer)) != -1) {
sb.append(new String(buffer, 0, len));
}
System.out.println("Received message: " + sb.toString());
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
4.网络通信(客户端)
try {
Socket socket = new Socket("localhost", 12345);
OutputStream os = socket.getOutputStream();
String message = "Hello, network communication!";
os.write(message.getBytes());
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
数据解析:使用InputStream/Reader等类读取数据流,使用各种解析器(如XML解析器、JSON解析器)进行解析。比如解析XML、JSON等数据格式。
5.数据解析(XML)
try {
File file = new File("test.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
NodeList nodeList = doc.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String id = element.getAttribute("id");
String title = element.getElementsByTagName("title").item(0).getTextContent();
String author = element.getElementsByTagName("author").item(0).getTextContent();
System.out.println("Book " + id + ": " + title + " by " + author);
}
}
} catch (Exception e) {
e.printStackTrace();
}
图像处理:使用InputStream/OutputStream等类读取和写入图片,使用ImageIO类等进行图像处理。比如读取图片、裁剪图片、旋转图片等。
6.图像处理
try {
BufferedImage image = ImageIO.read(new File("test.jpg"));
int width = image.getWidth();
int height = image.getHeight();
BufferedImage rotatedImage = new BufferedImage(height, width, image.getType());
Graphics2D g = rotatedImage.createGraphics();
g.rotate(Math.toRadians(90), height / 2.0, height / 2.0);
g.drawImage(image, 0, 0, null);
ImageIO.write(rotatedImage, "jpg", new File("rotated.jpg"));
g.dispose();
} catch (IOException e) {
e.printStackTrace();
}
总之,Java中的输入输出流提供了一种通用的机制来操作不同类型的数据,使用时需要了解不同的输入输出流类和方法的特点和用法,以便在各种场景下实现对数据的有效操作。