根据提供的文件信息,我们可以总结出Java中关于流的应用与比较的相关知识点。虽然代码片段似乎不完整,但可以从中提取到一些关键概念。 ### Java中流的概念 在Java中,“流”(Stream)是一种用于处理输入输出操作的方式。流分为两大类:输入流和输出流。输入流是从程序外部读取数据的流;而输出流则是向程序外部写入数据的流。这些流通常用于文件操作、网络通信等场景。 ### Java中的流分类 #### 按照功能分类 - **节点流**(Node Streams):直接连接到数据源或目的地。 - `FileInputStream`/`FileOutputStream` - `DataInputStream`/`DataOutputStream` - **过滤流**(Filter Streams):包装另一个流,并在传递给该流之前增加额外的功能。 - `BufferedInputStream`/`BufferedOutputStream` #### 按照数据类型分类 - **字节流**(Byte Streams):以8位字节的形式处理数据。 - `InputStream`/`OutputStream` - **字符流**(Character Streams):以16位字符的形式处理数据。 - `Reader`/`Writer` ### 关键流类型介绍 #### FileInputStream/FileOutputStream - **FileInputStream**:从文件系统中的某个文件中获得输入字节。 - **FileOutputStream**:将输出字节写入文件系统中的一个文件或文件名指定的文件。 示例代码: ```java File file = new File("path/to/file"); if (!file.exists()) { file.createNewFile(); } FileOutputStream fos = new FileOutputStream(file); fos.write("Hello, world!".getBytes()); fos.close(); ``` #### DataInputStream/DataOutputStream - **DataInputStream**:从下层流读取原始数据并将其转换为更复杂的对象。 - **DataOutputStream**:写入更复杂的对象到下层输出流。 示例代码: ```java DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt")); dos.writeInt(12345); dos.writeUTF("Hello, world!"); dos.close(); ``` #### BufferedInputStream/BufferedOutputStream - **BufferedInputStream**:通过添加缓冲功能来提高读取性能。 - **BufferedOutputStream**:通过添加缓冲功能来提高写入性能。 示例代码: ```java BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("buffered.txt")); bos.write("Hello, buffered output stream!".getBytes()); bos.flush(); bos.close(); ``` ### 流的应用场景 1. **文件操作**:最常见的应用场景之一,用于读取和写入文件。 2. **网络通信**:在网络上传输数据时,使用流可以高效地进行数据传输。 3. **数据库交互**:与数据库进行交互时,可以通过流来发送SQL命令或接收结果集。 ### 示例:文件加密解密 根据题目中提供的代码片段,可以看出作者尝试实现了一个简单的文件加密解密过程: 1. 使用`FileWriter`对文件中的内容进行异或加密后写入。 2. 再次读取文件,并尝试解密。 示例代码(简化版): ```java // 加密 File file = new File("text.txt"); FileWriter fw = new FileWriter(file); String content = "this is a jiami file"; char[] chars = content.toCharArray(); for (int i = 0; i < chars.length; i++) { chars[i] = (char) (chars[i] ^ 'A'); } fw.write(chars); fw.close(); // 解密 FileInputStream fin = new FileInputStream(file); byte[] b = new byte[fin.available()]; fin.read(b); StringBuilder decrypted = new StringBuilder(); for (byte c : b) { decrypted.append((char) (c ^ 'A')); } System.out.println(decrypted.toString()); ``` ### 总结 通过对Java中各种流的理解和应用,可以有效地处理文件操作、网络通信等场景下的数据读写需求。理解不同流之间的区别及其适用场景对于开发人员来说至关重要。希望以上总结能帮助您更好地理解和掌握Java中的流技术。
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.Stack;
import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class Pintu
{
public static void main(String[] args)
{
/* try
{
//将一个文件转换为输入流,,从此文件中读取数据
File file=new File("C:/Users/Administrator/Desktop/text.txt");
if(!file.exists())
{
剩余10页未读,继续阅读
- 粉丝: 44
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助