我正在一个应用程序中工作,我们需要以XML格式保存对象,并在需要时稍后加载它们.为此,我使用JAXB来编组和解组XML到Java类.
我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),因此,我将拥有不兼容的已保存的XML,这些XML无法绑定回新的类表单.
为了解决这个问题,每次我必须进行更改时,我会在新软件包(以其版本命名)下获取所有类的副本并应用所请求的更改.在保存XML时,我保存了它的版本,以便我可以决定JAXB应该扫描哪个包来解组这个XML.
我的问题是,有没有其他方法可以使用JAXB实现向后和向前兼容性?如果没有,是否有任何其他技术可以支持这个?
如果我有一组小字符串值,并且我想获取一个数值来表示它们,那么通过查找表执行此操作的最佳方法是什么?
如果我只需要直接查找,我知道最佳解决方案只是一系列if语句:
if (strcmp(str, "foo") == 0)
tmp = FOO;
else if (strcmp(str, "bar") == 0)
tmp = BAR;
Run Code Online (Sandbox Code Playgroud)
但是,我问这个因为这些小字符串值表示我用C编写的小项目中的属性,并且属性可以是只读或读写(现在不是只写,也许永远不会).
所以我目前只是为了确保工作正常,它有一个查找函数,它包含一个if-then子句,用于查找哪些值是只读的,另一个函数用于查找哪些值是读写的.但这对我来说是巨大而丑陋的.
我在想,有三个功能.一个函数是lookup函数,它返回一个int值,该值是字符串的数字形式.但是,此查找函数还可以采用一个标志来确定它是获取只读值还是读取写入值.如果对真正只读的值执行写操作,则该函数将返回-EINVAL(或等效的值).
另外两个函数,现在仍然是读取和写入,只调用此查找函数,传入值的字符串,以及确定它们是用于读取还是写入的标志.
事实上,我不知道这是如何在C中建模的(如果它可以被建模),并且搜索谷歌是令人厌烦的所有内容农场剥离这个地方(并给我C++/C#答案).
所以这就是我认为的样子:
int lookup_func(const char *name, const char *flag) {
int tmpval = 0;
/* code to do the lookup. */
if (tmpval == 0)
return -EINVAL;
else
return tmpval;
}
int get_readonly_bit(const char *name) {
return lookup_func(name, "ro");
}
int get_readwrite_bit(const char *name) {
return lookup_func(name, "rw")
}
Run Code Online (Sandbox Code Playgroud)
思考?这个想法是通过不重复这两个函数的if-then分支来减少代码大小,这两个函数在整体设计上略有不同,只是让某种查找函数找出这个值所服务的函数.
有没有简单的方法从WinApi HANDLE创建指向管道一端的FILE*?像我们在unix中做的事:fdopen(fd,<mode>);
我正在尝试使用协议缓冲区将数据库中的序列化数据存储在java中构建的Web应用程序中.
我创建了.proto文件并编译它们以获取生成的类.我也可以使用setter和finally build()方法构建消息对象.但是要将它存储到数据库,我需要将序列化数据作为byte []或字节缓冲区.我怎么最终从消息实例中得到它?
import com.paratha.serializers.protocolbuffers.CommentProto.Comment;
Comment.Builder comment=Comment.newBuilder();
comment.setCommentBody("This is the first comment!").setUserId(32433).build();
Run Code Online (Sandbox Code Playgroud)
如何从此处获取序列化数据以写入数据库?
我正在使用php内部邮件功能发送邮件,我把它包装在UTF8的一个功能过程中,我在网上发现了它.
它有效,我将代码中的电子邮件发送到我的GMAIL和我的EXCHANGE服务器,无论是在GMAIL还是我的PC上的Outlook客户端,我都得到了正确的信息.
我的iPhone也连接到交换机和GMAIL帐户,因此我在iPhone上收到这两条消息.iPhone正确收到GMAIL消息,但EXCHANGE帐户显示带有乱码乱码文本的消息,其中没有拉丁字符.
下面的例子在主体和身体中发送希伯来字符.在我的iPhone上,主题在希伯来语中被正确接收,但是消息正文中的希伯来语部分是乱码.
谁能对此发表评论?也许你自己设置尝试?
谢谢,
<?php
function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') {
$header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header);
}
$mymessage = "Hello <BR>";
$mymessage.= "Received: now<BR/><BR/>";
$mymessage.= "details: ???? ????<BR/><BR/>";
mail_utf8 ("XXX@gmail.com,XXX@exchangeServer.com", "????", $mymessage, "my_mail", "mailer@phpmail.com");
?>
Run Code Online (Sandbox Code Playgroud) 我可以设置JavaScript的rendered属性值h:commandLink吗?
<h:commandLink id="profileLink" rendered="#{bean.enable}">
Run Code Online (Sandbox Code Playgroud) 我需要在Win和*nix机器上获得硬盘规格.我<hdreg.h>在Linux上使用过这样的:
static struct hd_driveid hd;
int device;
if ((device = open("/dev/sda", O_RDONLY | O_NONBLOCK)) < 0)
{
cerr << "ERROR: Cannot open device /dev/sda \n";
exit(1);
}
if (!ioctl(device, HDIO_GET_IDENTITY, &hd))
{
cout << hd.model << endl;
cout << hd.serial_no << endl;
cout << hd.heads << endl;
}
Run Code Online (Sandbox Code Playgroud)
我需要hd_driveid告诉我一些关于磁盘的更多信息.我想知道:
我的问题是:
我正在寻找旧版本的Borland Turbo C++编译器.但是我必须以合法的方式获得它.有没有人听说过这些旧编译器的折扣?
[编辑]
我想宣传我的旧资源用于教育目的,但是他们只会在这个旧的编译器上编译.我想向博客读者展示他们在学习新语言时应该避免的错误.
因此,如果有人可以下载源代码并在自己的计算机上编译它们会很棒.因此,我希望在这么多年之后,Borland可以免费向公众提供这些旧版本......
我一直在看Git和cURL,我发现了一些关于.netrc的引用,这可能有助于HTTP身份验证.问题是:.netrc是愚蠢的,因为它以纯文本格式存储密码,这对我正在开发的解决方案来说是一个很大的安全问题.
是否有替代.netrc方法?是否有可能为cURL开发"身份验证后端"?