上一篇
在Java中可通过变量存储基本数据,集合框架(如List/Map)管理对象组,数组存放同类型元素,文件/数据库持久化数据,或利用对象封装属性实现结构化存储。
内存级存储:高效访问临时数据
变量与对象
// 基本类型存储
int userId = 1001;
String userName = "张三";
// 对象存储
class User {
private int id;
private String name;
// Getter/Setter省略
}
User currentUser = new User(1001, "张三");
适用场景:方法内部临时计算、对象属性存储。
数组与集合框架
// 数组存储
int[] scores = {90, 85, 78};
// List顺序存储
List<String> cities = new ArrayList<>();
cities.add("北京");
cities.add("上海");
// Map键值对存储
Map<Integer, String> users = new HashMap<>();
users.put(1001, "张三");
users.put(1002, "李四");
集合选型指南:
ArrayList→ 高频随机访问LinkedList→ 频繁增删操作HashSet→ 快速去重ConcurrentHashMap→ 线程安全KV存储
文件存储:持久化本地数据
文本文件(TXT/CSV/JSON)
try (BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))) {
writer.write("ID,Name,Emailn");
writer.write("1001,张三,zhangsan@example.com");
} catch (IOException e) {
e.printStackTrace();
}
优势:人可读、跨平台兼容
局限:大数据量时性能低
二进制文件
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.dat"))) {
oos.writeObject(currentUser); // 需实现Serializable接口
} catch (IOException e) {
e.printStackTrace();
}
用途:保存序列化对象、图片等二进制数据
数据库存储:结构化数据管理
JDBC操作关系型数据库
String sql = "INSERT INTO users (id, name) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, 1001);
stmt.setString(2, "张三");
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
数据库选型:MySQL(开源)、Oracle(企业级)、PostgreSQL(高并发)

ORM框架(如Hibernate)
// 注解定义实体类
@Entity
@Table(name = "users")
class User {
@Id
private int id;
private String name;
}
// 自动保存对象
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(new User(1001, "张三")); // 自动生成SQL
session.getTransaction().commit();
优势:减少手写SQL,提高开发效率
高速缓存:提升读取性能
本地缓存(Caffeine)
Cache<Integer, User> cache = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(1000)
.build();
cache.put(1001, currentUser);
User cachedUser = cache.getIfPresent(1001);
适用场景:频繁读取的配置数据、会话信息
分布式缓存(Redis)
Jedis jedis = new Jedis("localhost");
// 存储字符串
jedis.set("user:1001:name", "张三");
// 存储对象(需序列化)
jedis.set("user:1001".getBytes(), SerializationUtils.serialize(currentUser));
优势:集群扩展、支持TTL过期、发布订阅功能

云存储与分布式系统
NoSQL数据库(MongoDB)
MongoClient client = new MongoClient("localhost", 27017);
MongoDatabase db = client.getDatabase("test");
Document userDoc = new Document("_id", 1001)
.append("name", "张三")
.append("email", "zhangsan@example.com");
db.getCollection("users").insertOne(userDoc);
适用场景:JSON文档、日志数据等半结构化存储
分布式文件系统(HDFS)
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
FileSystem fs = FileSystem.get(conf);
// 写入文件
try (FSDataOutputStream out = fs.create(new Path("/data/user.txt"))) {
out.writeUTF("1001,张三");
}
优势:PB级数据存储、高容错性
选型决策树
| 需求场景 | 推荐方案 |
|---|---|
| 临时计算中间结果 | 内存变量/集合 |
| 配置参数持久化 | 文本/Properties文件 |
| 事务性业务数据(订单等) | MySQL + JDBC/Hibernate |
| 高频查询缓存 | Redis/Caffeine |
| 海量非结构化数据 | HDFS/MongoDB |
| 跨会话共享数据 | 数据库/分布式缓存 |
安全与性能建议
- 数据加密
- 敏感信息使用AES加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedData = cipher.doFinal(data);
- 敏感信息使用AES加密
- 连接池优化
数据库用HikariCP,Redis用Lettuce

- 序列化协议
高性能场景选Protobuf/Kryo替代Java原生序列化
Java的信息存储方案需根据数据量级、访问频率、持久化要求三维度综合选择:
- 内存存储:毫秒级响应,但进程退出即丢失
- 文件/数据库:持久化保障,适合关键业务
- 分布式系统:应对高并发、大数据场景
引用说明:
- Oracle官方Java文档 https://docs.oracle.com/javase/tutorial/
- Redis命令参考 https://redis.io/commands
- Hibernate用户手册 https://hibernate.org/orm/documentation/
- Google Protobuf指南 https://developers.google.com/protocol-buffers
本文代码示例遵循MIT开源协议,安全建议参考OWASP标准
