小编Xao*_*Bao的帖子

如何在没有方法链的情况下使用"JSR-353:用于JSON处理的Java API"

我想与使用新的JSR-353(JSON Processing的Java API)分享我的问题/答案.具体来说,您可以在两个不同的"API"Streaming和Object API中操作JSON数据.

如果您在谷歌中输入"jsr-353教程",您将获得许多结果.

https://jcp.org/en/jsr/detail?id=353~ 具体要求的详细信息.

https://jsonp.java.net/~API的主站点,也链接到位于https://docs.oracle.com/javaee/7/tutorial/doc/jsonp的 "文档"下的Oracle Tutorial . htm 我稍后会详细介绍这个教程.

最后这一个

http://www.javabeat.net/java-json-api-jsr-353/

我想先谈谈最后一个链接,因为它为我提供了很多很好的细节,并且是其中一个真正的教程(还有其他的,但它们基本相同).

我真正试图了解的API不仅是这个API的新手,而且通常是JSON.

何时使用Streaming API和Object Model API?

如果您希望将JSON数据写入字符流(如文件或字节流),那么Streaming API将是最佳选择,因为它直接执行写入操作到缓冲区而无需在内存中构建对象树,即不是在创建最终JSON数据之前生成的中间形式.

如果要将JSON数据作为对象树保存在内存中,即不写入任何流,而是将树存储在内存中,以便可以重用JSON数据而无需重新分析它,或者也可以将对象树序列化为保留/保存JSON数据.这里JSON数据将以对象树的形式表示.

现在Streaming API描述对我来说很有意义,我需要保存一个文件,这对我来说很有意义.

对于Object API,它也是有意义的,保存对象,以便我可以在以后的代码中重用它,真棒.

问题是我没有得到我的问题的答案,我将解释我现在正在寻找什么.

我的问题是:

我基本上有一个包含其他对象/数组的对象.

最初我使用BufferedWriter将数据写入新行到文本文件中.

我的格式看起来像这样.

bw.write(1);
bw.newLine();
bw.write(2);
bw.newLine();

for(int i = 0; i < 4; i++)
{
bw.write(i);
bw.newLine();
}

bw.write(2);
bw.newLine();

for(int j = 0; j < 2; j++)
{
bw.write(j);
bw.newLine();
bw.write(j+5);
bw.newLine();
bw.write(2);
bw.newLine();
bw.write(j*4);
bw.newLine();
}

bw.write(12);
bw.newLine();

for(int k = 0; k …
Run Code Online (Sandbox Code Playgroud)

java json fluent-interface alternate jsr-353

6
推荐指数
1
解决办法
4709
查看次数

我们什么时候应该在方法中抛出异常或捕获异常?

我一直在阅读有关异常的更多内容,但我不确定在什么情况下我们应该抛出一个方法

public void fxml() throws IOException
{
     // method body here
}
Run Code Online (Sandbox Code Playgroud)

或捕获方法内的异常

public void fxml()
{
          FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml.fxml"));

            try
            {
                fxmlLoader.load();
            } 
            catch (IOException exception) 
            {
                throw new RuntimeException(exception);
            } 
}
Run Code Online (Sandbox Code Playgroud)

从 Oracle 的例子来看,它说

有时,代码适合捕获其中可能发生的异常。然而,在其他情况下,最好让调用堆栈上方的方法来处理异常。例如,如果您将 ListOfNumbers 类作为类包的一部分提供,则您可能无法预测包中所有用户的需求。在这种情况下,最好不要捕获异常并允许调用堆栈上方的方法来处理它。

https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html

所以我很好奇这是否意味着我们可能不需要该类/方法,并且通过在该方法中执行 try/catch,如果我们不使用它,它就没有任何作用,所以我们“扔掉它”以后用?

似乎类本身也会“抛出异常”以便稍后使用......它只是一个抛出层次结构,直到你最终可以使用它吗?在上面的教程中,几章后面有一章称为“链式异常”,这本质上是稍后使用的方法抛出的情况吗?

我还读过这个线程When to use throws in a Java method statements?

但我发现它并没有完全解释我想知道的事情,但是我发现了这种兴趣

如果您正在捕获异常类型,则不需要抛出它,除非您要重新抛出它。在您发布的示例中,开发人员应该执行其中一项操作,而不是同时执行两项操作。

通常,如果您不打算对异常执行任何操作,则不应捕获它。

您能做的最危险的事情就是捕获异常而不对其进行任何操作。

我不太确定他所说的“重新抛出”它是什么意思,除非他说的是抛出该方法并稍后捕获它?

然后他谈到,如果您不打算使用它,则不要执行任何异常操作,因此,如果我们需要它,似乎最好将其丢弃以供以后使用?

然后说它危险吗?为什么是这样?

因此,本质上,如果我们不知道是否要使用它,那么我们应该抛出它,以便可以调用方法本身,或者如果我们知道它将被调用,无论如何,那么我们应该尝试一下/捕获块?

我还注意到我的示例还引发了基于 IOException 的 RuntimeException。因此,从某种意义上说,您可以采用我们抛出的第一个方法,无论异常是什么,然后将其扔到 try 或 catch 块中?看起来 catch 块更适合“RuntimeException”或其他系统异常之一,但也许还有其他用例?

想法?

谢谢您的帮助!

java exception try-catch

4
推荐指数
1
解决办法
6883
查看次数

有符号基元中的 0 是正数还是负数(或两者兼而有之)?

我正在“Code Ranch”上阅读此页面,其中讨论了变量。

它正在讨论“有符号原语”,并说 0 算作负数???

我一直认为这些情况下 0 是阳性?

所有这些整数类型都是有符号的。最左边的位表示符号(正或负),不是值的一部分。例如,对于一个字节,您无法获得整个 8 位来表示您的值。您得到 7。这​​为您提供了字节范围:(-2 到第 7 个)到(2 到第 7 个)-1。为什么最后有那个小-1?因为那里有零,而零算作负数。与其他人的工作方式相同。

http://www.javaranch.com/campfire/StoryCups.jsp

但是当看这篇文章时Why the range of bytes of bytes in Java? -128 to 127 in Java?

一条评论提到“默认情况下 0 为正”。它还谈到了“二人的赞美”,并提到最左边的位中带有“1”的任何内容都将是“负数”,而 0 则没有......

另外,如果 0 是负数 -128 到 0 就是 129 个负数,127 个正数,这没有意义......

所以我很好奇这是否是一个错误,或者 0 是否为负数,为什么?

另外,我正在阅读这篇文章原始浮点值如何为-0.0?这意味着什么?

那是在谈论值为 -0.0 的浮点数,并为其添加“0.0”以使其成为“中性/正数”0.0....

所以我很好奇浮点数中是否同时存在正零和负零,或者它是否同时存在于浮点和整数基元中???

另外,当我在谷歌上搜索这个问题的答案时,提到“零既不是正负也不是正负......”好奇这是否/何时适用于我们的语言?

谢谢

java variables primitive signed zero

2
推荐指数
1
解决办法
2323
查看次数