临时保存数据

@override
protected void onSaveInstanceState(Bundle outState) {
	super.onSaveInstanceState(outState);
	outState.putString("KEY",textView.getText().toString());
}

protected void onCreate(Bundle saveInstanceState) {
	super.onCreate(saveInstanceState);
	if(saveInstanceState != null) {
		String s = saveInstanceState.getString("key");
		textView.setText(s);
}
<think>好的,用户现在问的是Java不用数据库怎么临时保存数据。首先,我需要理解用户的需求。可能用户正在开发一个不需要持久化存储的小型应用,或者只是临时测试某些功能,不想配置数据库。也有可能用户对数据库不熟悉,想找一些简单的替代方案。 接下来,我需要回忆Java中有哪些临时存储数据的方法。首先想到的是内存数据结构,比如集合类List、Map、Set这些,应该是最直接的。然后,单例模式或者静态变量,这样可以全局访问。不过要注意线程安全的问题。 然后,Java有内嵌的数据库比如H2或者SQLite,不过用户明确说不用数据库,所以可能排除。但可能需要提到,以防用户不知道有轻量级的选择。不过用户可能真的不想用任何数据库,所以还是集中在内存存储上。 另外,缓存框架比如Ehcache、Caffeine,这些虽然属于第三方库,但可以临时保存数据,而且比手动管理集合更高效。还有系统属性或环境变量,不过这些适合小量数据,且可能影响整个应用环境,需要谨慎使用。 文件存储的话,虽然用户说不用数据库,但可能接受临时文件,比如用File或Properties类保存到文件里,不过重启后数据会丢失,属于临时存储的一种方式。但需要确认用户是否接受文件存储,还是严格只用内存。 用户可能关心不同方法的优缺点,比如线程安全、数据量大小、易用性等。比如使用ConcurrentHashMap可以解决多线程的问题,而普通HashMap则不安全。静态变量虽然方便,但生命周期长,可能影响内存。 另外,用户可能没有考虑到数据需要序列化或者持久化的问题,但题目里明确说不用数据库,所以可能不需要持久化,但需要说明这些方法是临时性的,应用重启后数据丢失。 还要注意,是否需要提到缓存框架的配置和使用方法,或者只是简单列举。根据之前的回答,用户可能希望有代码示例,所以最好给出每个方法的简单例子,比如使用Map的例子,或者Properties的例子。 可能存在的误区是,用户认为不用数据库就只能用内存,但实际上还有文件或缓存框架等选项。需要分点说明,结构清晰。 总结下来,回答的结构应该是先介绍内存中的集合类,然后静态变量,缓存框架,文件存储,系统属性,最后比较优缺点和适用场景。需要提醒线程安全、数据生命周期、性能等问题,帮助用户根据具体需求选择合适的方法。</think>在 Java 中若不使用数据库,可以通过以下方式临时保存数据(**数据仅在内存或应用运行期间存在**): --- ### 一、内存数据结构存储 #### 1. 集合类(`Collection`) - **适用场景**:高频读写的小规模数据 - **实现方法**: ```java // 使用 Map 存储键值对 Map<String, Object> tempData = new HashMap<>(); tempData.put("user", "John"); tempData.put("score", 95); // 使用 List 存储有序数据 List<String> logs = new ArrayList<>(); logs.add("2023-10-01: 用户登录"); ``` #### 2. 线程安全版本 - **适用场景**:多线程并发访问 ```java Map<String, Integer> concurrentMap = new ConcurrentHashMap<>(); List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>()); ``` --- ### 二、单例模式存储 #### 1. 静态变量 - **特点**:全局唯一,应用生命周期内有效 ```java public class DataHolder { private static final Map<String, Object> storage = new HashMap<>(); public static void save(String key, Object value) { storage.put(key, value); } public static Object get(String key) { return storage.get(key); } } // 使用示例 DataHolder.save("config", "{timeout: 30}"); ``` --- ### 三、缓存框架(无需数据库依赖) #### 1. 轻量级缓存库 - **Caffeine**(推荐): ```java Cache<String, Object> cache = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) // 设置过期时间 .maximumSize(100) // 最大条目数 .build(); cache.put("token", "abc123"); ``` #### 2. 简单缓存实现 - **Ehcache**(XML 配置即可): ```xml <!-- ehcache.xml --> <cache name="tempCache" maxEntriesLocalHeap="1000" timeToLiveSeconds="3600"/> ``` --- ### 四、文件临时存储 #### 1. 临时文件(应用退出后自动删除) ```java File tempFile = File.createTempFile("temp_", ".data"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile))) { writer.write("临时数据"); } ``` #### 2. Properties 文件 ```java Properties props = new Properties(); props.setProperty("language", "zh_CN"); // 保存到文件(可选) props.store(new FileOutputStream("config.tmp"), "临时配置"); ``` --- ### 五、系统级存储 #### 1. 系统属性 ```java System.setProperty("debug_mode", "true"); String debug = System.getProperty("debug_mode"); // 返回 "true" ``` #### 2. 环境变量(只读) ```java String path = System.getenv("PATH"); ``` --- ### ⚠️ 方案对比与选择建议 | 方法 | 生命周期 | 线程安全 | 适合场景 | |-------------------|---------------|----------|----------------------------| | 内存集合类 | 应用运行期间 | 需控制 | 小规模临时数据 | | 单例静态存储 | 应用运行期间 | 需控制 | 全局共享配置 | | 缓存框架 | 可自定义过期 | 安全 | 高频访问的短期数据 | | 临时文件 | 文件存在期间 | 安全 | 需跨会话暂存的结构化数据 | | 系统属性 | JVM 生命周期 | 安全 | 简单键值型配置 | **优先推荐**: - 需要 **快速访问** → 使用 `Caffeine` 或 `ConcurrentHashMap` - 需要 **过期策略** → 缓存框架 - 需要 **跨重启保留** → 临时文件(但非数据库方案)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值