我有一群具有类型的字段的模型类的List<X>地方X是很多的事情之一(例如String,Integer,但也有一些我自己的类型).我正在使用GSON来解析这些模型的JSON表示.
我的问题是我正在处理的服务器(这是我无法控制的)以某种方式删除了单例数组并用包含的对象替换它们.
例如,而不是返回:
{
"foo": [ "bar"],
"bleh": [ { "some": "object" } ]
}
Run Code Online (Sandbox Code Playgroud)
它返回:
{
"foo": "bar",
"bleh": { "some": "object" }
}
Run Code Online (Sandbox Code Playgroud)
现在假设Java模型类看起来像这样:
public class Model {
private List<String> foo;
private List<SomeObject> bleh;
}
Run Code Online (Sandbox Code Playgroud)
目前,这会导致GSON抛出异常,因为它找到BEGIN_STRING或BEGIN_OBJECT预期的位置BEGIN_ARRAY.
对于数组或字符串列表,可以使用a轻松解决TypeAdapter<List<String>>.但问题是我有List许多不同的元素类型,我不想TypeAdapter为每个案例分别编写.我也没有能够通用TypeAdapter<List<?>>,因为在某些时候你需要知道类型.那么还有另一种方法可以将GSON配置为足够聪明以将单个对象或值转换为数组/列表吗?或者换句话说,只是"假装"的[和]在那里它希望能够找到他们,虽然他们是不是有?
我的团队需要开发一个解决方案,byte[]在用Java编写的Android应用程序的上下文中加密二进制数据(存储为a ).加密数据将以各种方式传输和存储,在此期间不能排除数据损坏.最终,另一个Android应用程序(再次用Java编写)将不得不解密数据.
已经确定加密算法必须是AES,密钥为256位.但是,我想知道我们应该使用哪种AES实现和/或"模式".我已经阅读了一些名为GCM模式的内容,我们已经对它进行了一些测试(使用BouncyCastle/SpongyCastle),但我并不完全清楚AES-GCM的用途是什么以及与普通相比它"购买"了什么AES - 以及是否需要考虑任何权衡.
以下是我们所关注/要求/问题的列表:
填充:我们需要加密的数据并不总是128位的倍数,因此AES实现/模式应该添加填充,但仅在必要时.我的印象是,一个简单的AES实现,例如由提供的javax.crypto.Cipher,不会那样做,但初始测试表明它确实如此.所以我猜测填充要求本身并没有理由采用GCM而不是"普通"AES.那是对的吗?
身份验证:我们需要一种万无一失的方法来检测是否发生了数据损坏.但是,理想情况下,我们还希望检测何时使用不正确的密钥进行解密.因此,我们希望能够区分这两种情况.我最初考虑GCM的原因是由于这个Stackoverflow问题,其中一个响应者似乎暗示使用AES-GCM可以实现这种区分,尽管他没有提供详细的解释(更不用说代码)了.
最小化开销:我们需要限制加密数据的存储和传输开销.因此,我们希望知道特定AES实现/模式的选择是否以及在何种程度上影响开销量.
加密/解密性能:虽然这不是主要问题,但我们想知道特定AES实现/模式的选择在多大程度上影响加密和解密性能,无论是CPU时间还是内存占用.
提前感谢任何建议,澄清和/或代码示例.
编辑:德尔南有帮助地指出,没有"普通的AES"这样的东西.所以澄清一下,我的意思是使用Java的内置AES支持.
像这样:Cipher localCipher = Cipher.getInstance("AES");
我对SQLite的changes()函数有疑问,根据文档," 返回最近完成的INSERT,DELETE或UPDATE语句更改或插入或删除的数据库行数 "(另请参阅底层C的文档)/C++函数).
我希望使用此函数来检查执行UPDATE与单行有关的语句是否确实导致该行被更改.通过改变,我不仅仅意味着该行与语句的WHERE子句匹配.不,我的意思是,对于所讨论的行,执行后至少1列的值与之前相比实际上是不同的.如果你问我这是这个背景下变化的唯一正确定义.
所以我希望通过在执行语句后立即调用返回(行已更改)或(行未更改)来检测此类更改.但令我绝望的是,这似乎并没有像预期的那样奏效.changes()10UPDATE
请允许我举例说明:
CREATE TABLE People (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL);
INSERT INTO People (Name) VALUES ("Astrid");
SELECT changes();
Run Code Online (Sandbox Code Playgroud)
这里changes()返回1,正如预期的那样,因为我们刚刚INSERT编了1行.
UPDATE People SET Name = "Emma" WHERE Id = 1;
SELECT changes();
Run Code Online (Sandbox Code Playgroud)
这里changes()返回1,按预期的1排是UPDATED(即实际上改变:在 …
我想使用Choco 求解器编写一个 Java 程序,该程序生成满足许多约束的数学问题。问题必须采用以下形式:
x @ y ? z = r
Run Code Online (Sandbox Code Playgroud)
在哪里:
x, y&z是正整数,彼此不一定不同,其中一个为 2 位数,另外两个为 1 位数
@&?是运算符 +、- 或 *(请注意,两者也可以代表同一个运算符)
? r是一位正整数
我想“按需”生成这些数学问题(例如,当时一个)并且它们需要随机化(即,生成的问题不应该没有模式或固定顺序)。
自从我做约束(满足)编程以来已经有 10 多年了,但我相信 C(S)P(最好通过 Choco 的方式)是一个适合在这里应用的工具。这是正确的,有人可以帮助我开始吗?