Java的I/O类java.io.Reader,java.io.Writer,java.io.InputStream,java.io.OutpuStream和他们的不同子类中都有一个close()可抛出的方法IOException.
对于处理此类例外的正确方法是否有任何共识?
我经常看到建议只是默默地忽略它们,但这感觉不对,至少在开放写入资源的情况下,关闭文件时出现问题可能意味着无法写入/发送未刷新的数据.
另一方面,在阅读资源时,我完全不清楚为什么close()会扔掉它以及如何处理它.
那么有任何标准建议吗?
一个相关的问题是,close是否会抛出IOException?,但更多的是它的实现确实不丢,不是关于如何处理异常.
我们有一个基于JBoss 7.1构建的Web应用程序,包含JSF2和Primefaces 3.3.
在我们的一个页面上,ui:repeat显示了10个项目; 然后用户可以点击某种"显示更多"按钮,并通过ajax显示另外10个项目.用户可以单击"显示更多"按钮,直到没有更多项目显示.注意:这不是分页,每次单击"显示更多"时显示的列表会变长.
实际上,当用户点击按钮时,服务器返回旧项和新项,而JSF的客户端每次都必须通过jQuery重建整个转发器.
我们希望找到更好,更高效的解决方案.旧项目在n-1和n调用之间不会发生变化,因此如果服务器只能通过ajax返回10个新项目,那么效率会更高.
在JSF2中有可能吗?JSF似乎并不真正符合这种递归渲染.唯一可以帮助我们的组件是TreeNode组件,但它看起来有点像黑客: - /
我正在查看可以在这个位置看到的SNMPBEECodec
特别是我正在查看encodeLength()
我感兴趣的函数A片段
int numBytes = 0;
int temp = length;
while (temp > 0)
{
++numBytes;
temp = (int)Math.floor(temp / 256);
}
Run Code Online (Sandbox Code Playgroud)
(来自Drexel SNMP库).
我想知道为什么Math.floor()使用而不是像一个简单的整数除法temp/256.似乎简单的整数除法会给出相同的结果.还是有技术差异?
有许多人认为特殊值的概念null(因为它在C,Java,C#,Perl,Javascript,SQL等语言中使用)是一个坏主意.关于SO和P.SE有几个问题,例如没有null的语言的最佳解释和空引用真的是一件坏事吗?.
但是,我找不到任何没有它们的语言.我熟悉的所有语言null或类似的东西(例如Perl中的"undefined").
我意识到,每种语言都需要某种方式来表达"缺乏价值".但是,不是使用"null"或"undefined",而是使用Maybe(Haskell)或Optional(Guava)之类的东西也可以使其显式化.具有"null"或"undefined"的主要区别在于,如果对象具有特定类型(Maybe,Optional ...),则该对象只能具有"无值".相反,"null"/"undefined"通常是每种类型可能的有效值.
在这个意义上,是否存在没有"null"或类似概念的语言?
我有一些依赖于测试数据的集成测试.该测试数据在阶段创建并在阶段中pre-integration-test删除post-integration-test.
我的问题是,如果我-DskipITs在Maven命令行上使用这些阶段仍然执行.
有没有什么方法-DskipITs可以跳过预集成测试和后集成测试阶段?
这是pom中的插件定义:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<configuration>
<driver>com.mysql.jdbc.Driver</driver>
<url>${database.url}</url>
<username>${database.user}</username>
<password>${database.pw}</password>
</configuration>
<executions>
<execution>
<id>create-integration-test-data</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<orderFile>descending</orderFile>
<fileset>
<basedir>${basedir}/src/test/resources/sql</basedir>
<includes>
<include>AdministrationTestTeardown.sql</include>
<include>AdministrationTestSetup.sql</include>
</includes>
</fileset>
</configuration>
</execution>
<execution>
<id>remove-data-after-test</id>
<phase>post-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<fileset>
<basedir>${basedir}/src/test/resources/sql</basedir>
<includes>
<include>AdministrationTestTeardown.sql</include>
</includes>
</fileset>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud) integration-testing maven maven-failsafe-plugin maven-lifecycle
在C语言中,你可以投既简单数据类型,例如int,float以及指向这些.
现在我假设如果你想从一个类型的指针转换为另一个类型的值(例如从*floatto转换int),则转换和解除引用的顺序无关紧要.也就是说,对于变量float* pf,你有(int) *pf == *((int*) pf).有点像数学中的交换性......
然而,情况似乎并非如此.我写了一个测试程序:
#include <stdio.h>
int main(int argc, char *argv[]){
float f = 3.3;
float* pf = &f;
int i1 = (int) (*pf);
int i2 = *((int*) pf);
printf("1: %d, 2: %d\n", i1, i2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的系统上输出是
1: 3, 2: 1079194419
Run Code Online (Sandbox Code Playgroud)
因此,转换指针似乎与转换值的方式不同.
这是为什么?为什么第二个版本不符合我的想法呢?
这是平台依赖的,还是我以某种方式调用未定义的行为?
在JSF应用程序中,参数javax.faces.FACELETS_REFRESH_PERIOD可用于启用/禁用XHTML文件的自动重新加载.
我目前正在研究正确的生产部署配置,并且偶然发现我们目前使用FACELETS_REFRESH_PERIOD = 1即使在生产中运行,这显然不是一个好主意.
这导致了一个问题:此参数的默认值是多少?
理想情况下,为了简单起见,我想从生产配置中省略FACELETS_REFRESH_PERIOD,并希望它使用"安全"默认值-1.但是,似乎并非如此,因为没有参数,似乎启用了刷新(使用Mojarra和MyFaces).
我检查了JSF规范,虽然它描述了参数,但它没有给出默认值.这是规范中的故意遗漏吗?
我一直认为,一般来说,类的主要工作应该在其实例方法中完成,而构造函数应该只将实例置于可用的初始状态.
但我发现在实践中有些情况下,将基本上所有实际工作放入构造函数似乎更有意义.
一个例子:我需要从数据库中检索一些特定于DBMS的信息.对我来说最自然的方式似乎有一个类DBMSSpecInfo,带有一个构造函数:
public DBMSSpecInfo(java.sql.Connection conn) throws SQLException{
// ... retrieve info from DBMS
}
/** @returns max size of table in kiB */
public int getMaxTableSize() {//...}
/** @returns max size of index in kiB */
public int getMaxIndexSize() {//...}
/** @returns name of default schema */
public String getDefaultSchema() {//...}
Run Code Online (Sandbox Code Playgroud)
您将构造一次类,构造函数将获取所有数据,然后您可以使用各种getter来检索所需的信息.
当然我可以将方法放在其他地方,并且只DBMSSpecInfo用于返回值(实际上只使用DBMSSpecInfo作为值持有者),但是创建一个类只是为了从单个函数返回值感觉很难看.
所以你怎么看?在构造函数中执行主要工作是否有问题?它在Java中是"非惯用的"吗?或者这是一种可接受的(虽然可能不常见)的做法?
我有一个设置,托管我的REST服务器的tomcat服务器将调用从HTTP(端口9080)重定向到HTTPS(端口9443).
我正在使用jersey 2.5实现,无法管理客户端以遵循重定向.
我发现了这个问题(泽西岛客户端不遵循重定向),但它是为泽西1.X系列提供的,而且API已经改变了.
我尝试使用以下测试代码将其调整为2.5:
SSLContextProvider ssl = new TrustAllSSLContextImpl(); // just trust all certs
Response response = ClientBuilder.newBuilder()
.sslContext(ssl.getContext()).newClient()
.register(LoggingFilter.class)
.target("http://testhost.domain.org:9080/rest.webapp/api/v1/hello/")
.property(ClientProperties.FOLLOW_REDIRECTS, Boolean.TRUE)
.request().get();
Assertions.assertThat(response.getStatus()).isNotEqualTo(302);
Run Code Online (Sandbox Code Playgroud)
由于客户端似乎没有遵循重定向,因此失败了.以下是日志记录筛选器提供的内容:
Feb 14, 2014 12:23:45 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Sending client request on thread main
1 > GET http://testhost.domain.org:9080/rest.webapp/api/v1/hello/
Feb 14, 2014 12:23:45 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Client response received on thread main
1 < 302
1 < Cache-Control: private
1 < Content-Length: 0
1 < Date: Fri, …Run Code Online (Sandbox Code Playgroud) 在GLib文档中,有一章关于类型转换宏.在关于转换int为*void指针的讨论中,它说(强调我的):
天真的,你可以试试这个,但这是不正确的:
Run Code Online (Sandbox Code Playgroud)gpointer p; int i; p = (void*) 42; i = (int) p;同样,该示例不正确,请勿复制.问题是在某些系统上你需要这样做:
Run Code Online (Sandbox Code Playgroud)gpointer p; int i; p = (void*) (long) 42; i = (int) (long) p;
(来源:GLib参考手册GLib 2.39.92,章节类型转换宏).
为什么演员long必要?
是否需要加宽int不作为指针演员的一部分自动发生?
java ×4
c ×2
casting ×2
jsf ×2
coding-style ×1
constructor ×1
encoding ×1
file-io ×1
int ×1
ioexception ×1
jersey-2.0 ×1
jquery ×1
jsf-2 ×1
long-integer ×1
maven ×1
mojarra ×1
myfaces ×1
null ×1
performance ×1
pointers ×1
primefaces ×1
redirect ×1
rest ×1
snmp ×1
tomcat ×1