- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 Java,我需要对名称值对的 Map
你会如何选择这样做:
网址编码? JSON?自己做?请指定您要使用的任何帮助程序库或方法。
(根据要求进行编辑以指定更多上下文和要求。)
最佳答案
正如@Uri 所说,额外的上下文会很好。我认为您主要关心的不是特定的编码方案,因为对于简单的 Map<String, String>
来说,为大多数编码滚动您自己的方案非常容易。 .
一个有趣的问题是:这个中间字符串编码有什么用?
如果它纯粹是内部的,一个特别的格式就很好,例如简单的连接:
key1|value1|key2|value2
如果人类晚上阅读它,像 Ruby 的 map 声明这样的格式是不错的:
{ first_key => first_value,
second_key => second_value }
如果编码是通过网络将序列化 map 发送到另一个应用程序,那么 XML 建议很有意义,因为它是标准的并且合理地 self 记录,代价是 XML 的冗长。
<map>
<entry key='foo' value='bar'/>
<entry key='this' value='that'/>
</map>
如果 map 将被刷新到文件并稍后由另一个 Java 应用程序读回,@Cletus 对 Properties class 的建议是一个很好的,并且具有易于打开和检查的额外好处。
编辑:您已经添加了要存储在数据库列中的信息 - 是否有理由使用单列而不是像这样的三列:
CREATE TABLE StringMaps
(
map_id NUMBER NOT NULL, -- ditch this if you only store one map...
key VARCHAR2 NOT NULL,
value VARCHAR2
);
除了让您存储更具语义意义的数据外,这还将编码/解码更正式地移至您的数据访问层,并允许其他数据库读者轻松查看数据,而无需了解您可能使用的任何自定义编码方案。如果需要,您还可以轻松地按键或值进行查询。
再次编辑:您已经说过它确实需要放入一个列中,在这种情况下我会:
使用第一个管道分隔的编码(或您喜欢的任何奇异字符,可能是一些无法打印的英文 unicode 字符)。最简单的东西。或者……
如果您使用像 Oracle 这样的数据库将 XML 识别为真实类型(因此可以为您提供针对它的 XPath 评估等)并且需要能够很好地从数据库层读取数据, 使用 XML。编写用于解码的 XML 解析器从来都不是一件有趣的事,但对于这样一个简单的架构,应该不会太痛苦。
即使您的数据库本身不支持 XML,您也可以将其放入任何旧的类似字符的列类型中...
关于java - Java 中字符串转换的简单属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370004/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!