从 API 级别 33 开始,getSerializable(String)不推荐使用 Bundle 类的方法。文档建议改为使用getSerializable(String, Class)。但该功能仅适用于 API 级别 33。
我当前的代码:
val model = args.getSerializable("key") as? Model
Run Code Online (Sandbox Code Playgroud)
现在应该是这样吗?
val model = args.customGetSerializable<Model>("key")
@Suppress("DEPRECATION")
inline fun <reified T : Serializable> Bundle.customGetSerializable(key: String): T? {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getSerializable(key, T::class.java)
} else {
getSerializable(key) as? T
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个这样的类:
public delegate void ChangedEventHandler(object sender, EventArgs e);
[Serializable]
public class valueDouble
{
public event ChangedEventHandler Changed;
public double value
{
get { return _value; }
set
{
_value = value;
if (Changed != null)
{
Changed(this, EventArgs.Empty);
}
}
}
private double _value = 0;
}
Run Code Online (Sandbox Code Playgroud)
我还有另一个Class(StepPulseblaster),它不是可序列化的,并添加了一个事件处理程序
valDouble.Changed += new ChangedEventHandler(sc_PropertyChanged);
Run Code Online (Sandbox Code Playgroud)
当我尝试序列化valueDouble类时,会出现错误:
The Type StepPulseblaster is not marked as serializable
Run Code Online (Sandbox Code Playgroud)
当我评论这条线
valDouble.Changed += ...
Run Code Online (Sandbox Code Playgroud)
不会再有任何错误了.
如何序列化连接了某些事件的类?
将Serializable对象保存到磁盘时,哪种文件扩展名最合适?
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = new FileOutputStream(filename);
out = new ObjectOutputStream(fos);
out.writeObject(mySerializableObject);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(out);
}
Run Code Online (Sandbox Code Playgroud) 我一直在学习如何使用Serializable.
我知道如果我创建一个具有不同变量的类'A' Serializable并且我添加Serializable到我的类中,它也是Serializable.
但是,实际上是谁实现了这两种方法来序列化?是否Object需要处理所有事情或不同类别在必要时重载它们?
看到您可以将任何文档转换为字节数组并将其保存到磁盘,然后将文件重建为其原始格式(只要您的文件名包含元数据等).
你为什么要用等级来标记一个班级[Serializable]?这是一个相同的想法,"元数据"类型信息,所以当你将对象转换为它的类时,事物是否正确映射?
我正在使用一个内部类,它是HashMap的子类.我有一个String关键和double[]价值观.我每次存储约200个双打double[].我应该使用大约700 MB来存储密钥,指针和双打.然而,内存分析显示我需要更多(略多于2 GB).
使用TIJmp(分析工具)我看到有一个char[]使用了几乎一半的总内存.TIJmp表示char[]来自Serializable和Cloneable.其中的值范围从字体列表和消息和单个字符的默认路径.
SerializableJVM中的确切行为是什么?它是否始终保持"持久"副本,从而使我的内存占用量增加一倍?如何在运行时编写对象的二进制副本而无需将JVM转换为内存占用?
PS:内存消耗增加最多的方法是下面的方法.该文件每行大约有229,000行和202个字段.
public void readThetas(String filename) throws Exception
{
long t1 = System.currentTimeMillis();
documents = new HashMapX<String,double[]>(); //Document names to indices.
Scanner s = new Scanner(new File(filename));
int docIndex = 0;
if (s.hasNextLine())
System.out.println(s.nextLine()); // Consume useless first line :)
while(s.hasNextLine())
{
String[] fields = s.nextLine().split("\\s+");
String docName = fields[1];
numTopics = fields.length/2-1;
double[] thetas = new double[numTopics];
for …Run Code Online (Sandbox Code Playgroud) 在我的理解中,PostgreSQL使用某种监视器来猜测可序列化隔离级别是否存在冲突.许多示例都是关于在并发事务中修改相同资源,并且可序列化事务很有效.但我想以另一种方式测试并发问题.
我决定测试2个用户修改他们自己的帐户余额,并希望PostgreSQL足够智能,不会将其检测为冲突,但结果不是我想要的.
下面是我的表,有4个帐户属于2个用户,每个用户都有一个支票帐户和一个储蓄帐户.
create table accounts (
id serial primary key,
user_id int,
type varchar,
balance numeric
);
insert into accounts (user_id, type, balance) values
(1, 'checking', 1000),
(1, 'saving', 1000),
(2, 'checking', 1000),
(2, 'saving', 1000);
Run Code Online (Sandbox Code Playgroud)
表数据是这样的:
id | user_id | type | balance
----+---------+----------+---------
1 | 1 | checking | 1000
2 | 1 | saving | 1000
3 | 2 | checking | 1000
4 | 2 | saving | 1000
Run Code Online (Sandbox Code Playgroud)
现在我为2个用户运行2个并发事务.在每笔交易中,我用一些钱减少支票账户,并检查用户的总余额.如果它大于1000,则提交,否则回滚.
用户1的例子:
begin;
-- Reduce checking …Run Code Online (Sandbox Code Playgroud) 我有以下场景:我正在使用WebAPI并根据模型将JSON结果返回给使用者.我现在还需要将模型序列化为base64,以便能够将它们保存在缓存中和/或将它们用于审计目的.问题是当我将[Serializable]属性添加到模型以便将模型转换为Base64时,JSON输出会发生如下变化:
该模型:
[Serializable]
public class ResortModel
{
public int ResortKey { get; set; }
public string ResortName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果没有该[Serializable]属性,则JSON输出为:
{
"ResortKey": 1,
"ResortName": "Resort A"
}
Run Code Online (Sandbox Code Playgroud)
使用[Serializable]JSON输出的属性是:
{
"<ResortKey>k__BackingField": 1,
"<ResortName>k__BackingField": "Resort A"
}
Run Code Online (Sandbox Code Playgroud)
如何在[Serializable]不更改JSON输出的情况下使用该属性?
serializable ×10
c# ×4
java ×4
android ×1
attributes ×1
bundle ×1
class ×1
cloneable ×1
events ×1
filenames ×1
heap ×1
json ×1
kotlin ×1
memory ×1
postgresql ×1
transactions ×1