虽然Thrift格式相对广泛使用(并且项目仍然存在),但我无法找到底层数据格式的规范.或格式,因为显然至少有两种格式; 标准的,紧凑的格式.
鉴于它的广泛使用,我希望它只是我可怜的google-fu,并且存在规范或规范(源代码之外).如果是这样,请分享!
编辑:Java源代码对于确定格式并不算太糟糕; 参见TBinaryProtocol.java和TCompactBinaryProtocol.java; 其中包含基元,由生成的类调用(扩展TBase)
编辑2:虽然它不包含格式规范,但" 缺失的指南 "是很好的阅读.
我在我正在编写的应用程序中大量使用JSON解析.我所做的大部分工作已经使用Android内置的JSONObject库实现(是json-lib吗?).
JSONObject似乎在JSON字符串中创建了绝对所有内容的实例......即使我最终没有使用它们.
我的应用程序目前运行得很好,即使在G1上也是如此.
我的问题是:使用像杰克逊这样的流解析器的速度和内存优势是否值得一试?
麻烦,我的意思是:据我所知,使用Jackson而不是内置库有三个缺点:
首先,我知道这个问题:
特别是最好的答案,http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html.
因此,使用Firefox(以及以后版本的Chrome实际上似乎也可以使用的操作系统)从Javascript访问二进制数据;不了解Opera.到现在为止还挺好.但我仍然希望找到一种方法来使用现代IE(理想情况下是IE 6,但至少是IE 7+)访问二进制数据,而不使用VB.有人提到XHR.messageBody不起作用(如果它包含零字节),但我想知道这是否可以用更新版本解决; 或者是否有可能允许简单二进制数据访问的备用设置.
我的具体用例是访问使用二进制数据传输格式(包括UTF-8编码中不合法的字节组合)编码的Web服务返回的数据.
javascript ajax internet-explorer xmlhttprequest binary-data
使用Asm可以很容易地定义简单的getter和setter(幸运的是,它甚至可以在FAQ中解释).但是有一件事没有提到,而且我一直无法找到文档,那就是如何使用泛型类型信息来实现它们.
我实际上能够很容易地确定泛型类型信息(因为代码将采用现有的字段和/或方法,并且存在完整的泛型类型处理和解析).我只需要为包含泛型类型的类型生成泛型版本.
我希望这就像修改签名的Asm ClassWriter/MethodVisitor调用一样容易,但文档中的一些注释表明它可能不那么容易(因为泛型信息存储在与常规信息不同的位置).
编辑:看起来入口点是"ClassWriter.visitField/Method(....,String signature) - 请注意,它的"描述"包含正常的非泛型类信息,但术语"签名"(在JLS中)具体指的是到泛型 - 包括类型信息.
我正在寻找一个简单的内存(和进程中)缓存,用于查询数据的短期缓存(但短期意义超出请求/响应,即会话边界).EhCache可能会工作,但看起来好像它可能不提供我需要的东西:限制不是缓存的对象数量,而是(大致)限制缓存数据消耗的内存量.
我知道很难在没有序列化的情况下找出给定对象的确切内存使用情况(我想避免在一般情况下因为它的速度慢而无法实现我的用途),而且我自己也不得不提供大小估计.
那么:是否有一个简单的开源java缓存,允许定义缓存对象的"权重",以限制缓存的事物数量?
编辑(2010年11月):对于它的价值,有一个名为Java CacheMate的新项目试图解决这个问题,以及其他一些改进的想法(多级内存中进程缓存)
我想使用GSON将下面的Example类序列化为JSON.
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.LinkedHashMap;
public class Example
{
private LinkedHashMap<String,Object> General;
private static final String VERSION="Version";
private static final String RANGE="Range";
private static final String START_TIME="Start_Time";
private static final String END_TIME="End_Time";
public Example() {
General = new LinkedHashMap<String,Object>();
General.put(VERSION, "0.1");
LinkedHashMap<String,String> Range = new LinkedHashMap<String, String>();
Range.put(START_TIME, "now");
Range.put(END_TIME, "never");
General.put(RANGE, Range);
}
public String toJSON() {
Gson gson = new GsonBuilder().serializeNulls().create();
return gson.toJson(this);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望得到以下输出:
{"General":{"Version":"0.1","Range":{"Start_Time":"now","End_Time":"never"}}}
Run Code Online (Sandbox Code Playgroud)
但是调用函数会toJSON()返回
{"General":{"Version":"0.1","Range":{}}}
Run Code Online (Sandbox Code Playgroud)
似乎GSON无法在Map中序列化RangeMap General.这是GSON的限制还是我在这里做错了什么?
我有以下XML架构:
<Courses semester="1">
<Course code="A231" credits="3">Intermediate A</Course>
<Course code="A105" credits="2">Intro to A</Course>
<Course code="B358" credits="4">Advanced B</Course>
</Courses>
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为POJO:
public class Schedule
{
public int semester;
public Course[] courses;
}
public class Course
{
public String code;
public int credits;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
这里有两件重要的事情需要注意:
我如何需要注释我的对象才能让FasterXML反序列化这个xml?
我的平台是windows vista 32,带有visual c ++ express 2008.
例如:
如果我有一个包含4000个字节的文件,我可以同时从文件中读取4个线程吗?并且每个线程访问文件的不同部分.
线程1读取0-999,线程2读取1000 - 2999等.
请举一个C语言的例子.
我没有看到一个选项javax.xml.stream.XMLEventWriter或javax.xml.stream.XMLOutputFactory以某种方式设置,以便写入空元素(而不是显式的开始和结束元素对).
我看到Woodstox有一个属性可以做到这一点,但它没有标准化.
我错过了任何明显的方法吗?