注意:这个问题及其大多数答案都发布在Java 7发布之前.Java 7提供了自动资源管理功能,可以轻松实现这一目标.如果您使用的是Java 7或更高版本,那么您应该转到Ross Johnson的答案.
什么被认为是在Java中关闭嵌套流的最佳,最全面的方法?例如,考虑设置:
FileOutputStream fos = new FileOutputStream(...)
BufferedOS bos = new BufferedOS(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
Run Code Online (Sandbox Code Playgroud)
我理解需要保证关闭操作(可能使用finally子句).我想知道的是,是否有必要明确确保嵌套流已关闭,或者只是确保关闭外部流(oos)?
我注意到的一件事,至少在处理这个具体的例子时,内部流似乎只是抛出FileNotFoundExceptions.这似乎意味着技术上不需要担心如果失败就关闭它们.
这是同事写的:
从技术上讲,如果实施得当,关闭最外层的流(oos)就足够了.但实施似乎有缺陷.
示例:BufferedOutputStream从FilterOutputStream继承close(),它将其定义为:
155 public void close() throws IOException {
156 try {
157 flush();
158 } catch (IOException ignored) {
159 }
160 out.close();
161 }
Run Code Online (Sandbox Code Playgroud)
但是,如果flush()由于某种原因抛出运行时异常,则永远不会调用out.close().所以看起来"最安全"(但很丑陋)主要担心关闭FOS,即保持文件打开.
什么被认为是最好的,当你绝对需要确定,关闭嵌套流的方法?
是否有任何正式的Java/Sun文档可以详细解决这个问题?
我们只想使用MyBatis的注释; 我们真的想避免使用xml.我们正在尝试使用"IN"子句:
@Select("SELECT * FROM blog WHERE id IN (#{ids})")
List<Blog> selectBlogs(int[] ids);
Run Code Online (Sandbox Code Playgroud)
MyBatis似乎无法选择整数数组并将其放入生成的查询中.它似乎"软弱地失败",我们没有得到任何结果.
看起来我们可以使用XML映射来实现这一点,但我们真的想避免这种情况.是否有正确的注释语法?
我希望能够在Clojure中使用常见的Lisp语法定义lambdas.例如:
(lambda (myarg)
(some-functions-that-refer-to myarg))
Run Code Online (Sandbox Code Playgroud)
这需要与以下相同:
#(some-functions-that-refer-to %)
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我知道我将永远只有一个arg,所以也许这简化了事情.(但它可以被称为任何东西 - "myarg"或其他什么.)
我怀疑一个可行的解决方案是"(defmacro lambda ......".如果是这样,我不确定最好的方法.如何干净地将arg名称翻译为%?以及如何最终得到正确的功能?
或者,是否有一个比编写我自己的宏更简单的解决方案,实际上重新实现了Clojure的...... lambda?
我正在创建一个便利宏.方便的一部分是可以使用String而不是#"re"表示法指定正则表达式.
我无法弄清楚的一个部分是如何让宏获取String并将其重写为Clojure正则表达式(例如,生成#"re"表示法).我认为这是一个语法/逃避问题.
我的第一次天真尝试(假装我只想要String-to-regex部分):
(defmacro mymac [mystr] `#~mystr)
Run Code Online (Sandbox Code Playgroud)
是否有可能做我想做的事情?或者,是否有一个实际的函数来获取String并生成一个正则表达式,而不是使用#reader宏?
或者我应该放入Java并使用java.util.regex.Pattern?
有没有办法使用Eclipse IDE在Java代码中找到潜在的数字溢出?例如...
long aLong = X * Y * Z;
Run Code Online (Sandbox Code Playgroud)
...其中X,Y和Z是整数,结果可能会溢出Integer.MAX_VALUE.(注意,也许与直觉相反,如果此示例中的结果溢出Integer.MAX_VALUE,则将为aLong分配错误的溢出值).
我查看了Eclipse的警告设置,PMD规则和FindBugs规则,我找不到任何设置来帮助解决这个问题.一位同事指出,IntelliJ会对此发出警告......而且我不得不承认我不能对Eclipse做同样的事情.;-)
澄清1:我不是在找一些给出误报的东西......只是警告说"你这里可能有溢出问题".
澄清2:这是"开发时间"所希望的......这意味着,在Eclipse寻找未使用的进口的同一阶段,PMD正在检查其规则等.
我想从任意数据集对象模型生成格式良好的表格文本.在Java中有一个很好的库吗?
具体来说,我希望输出格式化为命令行数据管理工具,如CLI for mysql.例:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name | varchar(100) | YES | | NULL | |
| release | year(4) | YES | | NULL | |
| studio | varchar(50) | YES | | NULL | |
| review | varchar(50) | YES | | NULL | |
| gross | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
一个主要的挑战是,在开始遍历数据之前,我不会自动知道最大列宽.此外,还有很多边缘情况,例如处理非常大的值长度和大量的行和列.
如果我必须自己构建它,我想我会使用String.format,并且我需要在开始输出之前预分析完整的数据集.虽然这是一个非常低级的编码,所以我很想找到一个已经解决了这个问题的好库.
我们正在计划一个主要用于JSON响应的新API服务器,它具有RESTful接口.我们关注规模和可用性.我们是否使用Restlet with Jetty(或其他连接器)在正确的轨道上?
我们要问的一个问题是,Java世界中有什么像Phusion Passenger?例如,一个预先构建的解决方案,用于保持服务器实例正常运行?