小编sle*_*ske的帖子

如何从close()正确处理IOException

Java的I/O类java.io.Reader,java.io.Writer,java.io.InputStream,java.io.OutpuStream和他们的不同子类中都有一个close()可抛出的方法IOException.

对于处理此类例外的正确方法是否有任何共识?

我经常看到建议只是默默地忽略它们,但这感觉不对,至少在开放写入资源的情况下,关闭文件时出现问题可能意味着无法写入/发送未刷新的数据.

另一方面,在阅读资源时,我完全不清楚为什么close()会扔掉它以及如何处理它.

那么有任何标准建议吗?

一个相关的问题是,close是否会抛出IOException?,但更多的是它的实现确实丢,不是关于如何处理异常.

java error-handling file-io ioexception

19
推荐指数
1
解决办法
7190
查看次数

如何部分重新加载ui:重复?

我们有一个基于JBoss 7.1构建的Web应用程序,包含JSF2和Primefaces 3.3.

在我们的一个页面上,ui:repeat显示了10个项目; 然后用户可以点击某种"显示更多"按钮,并通过ajax显示另外10个项目.用户可以单击"显示更多"按钮,直到没有更多项目显示.注意:这不是分页,每次单击"显示更多"时显示的列表会变长.

实际上,当用户点击按钮时,服务器返回旧项和新项,而JSF的客户端每次都必须通过jQuery重建整个转发器.

我们希望找到更好,更高效的解决方案.旧项目在n-1n调用之间不会发生变化,因此如果服务器只能通过ajax返回10个新项目,那么效率会更高.

在JSF2中有可能吗?JSF似乎并不真正符合这种递归渲染.唯一可以帮助我们的组件是TreeNode组件,但它看起来有点像黑客: - /

java jquery jsf primefaces jsf-2

18
推荐指数
1
解决办法
2126
查看次数

为什么在BER Codec中使用Math.floor()而不是整数除法

我正在查看可以在这个位置看到的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.似乎简单的整数除法会给出相同的结果.还是有技术差异?

java encoding snmp

17
推荐指数
2
解决办法
3万
查看次数

有没有"null"的语言?

有许多人认为特殊值的概念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"或类似概念的语言?

language-agnostic null language-design

17
推荐指数
1
解决办法
6137
查看次数

如果设置了skipITs,如何跳过maven阶段预集成测试?

我有一些依赖于测试数据的集成测试.该测试数据在阶段创建并在阶段中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

14
推荐指数
2
解决办法
5804
查看次数

在C中,如果我对一个指针进行转换和取消引用,那么我先做哪一个是否重要?

在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)

因此,转换指针似乎与转换值的方式不同.

这是为什么?为什么第二个版本不符合我的想法呢?

这是平台依赖的,还是我以某种方式调用未定义的行为?

c casting undefined-behavior

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

FACELETS_REFRESH_PERIOD的默认值是多少?

在JSF应用程序中,参数javax.faces.FACELETS_REFRESH_PERIOD可用于启用/禁用XHTML文件的自动重新加载.

我目前正在研究正确的生产部署配置,并且偶然发现我们目前使用FACELETS_REFRESH_PERIOD = 1即使在生产中运行,这显然不是一个好主意.

这导致了一个问题:此参数的默认值是多少?

理想情况下,为了简单起见,我想从生产配置中省略FACELETS_REFRESH_PERIOD,并希望它使用"安全"默认值-1.但是,似乎并非如此,因为没有参数,似乎启用了刷新(使用Mojarra和MyFaces).

我检查了JSF规范,虽然它描述了参数,但它没有给出默认值.这是规范中的故意遗漏吗?

performance configuration jsf myfaces mojarra

13
推荐指数
1
解决办法
6911
查看次数

在构造函数中执行类的主要工作有什么问题吗?

我一直认为,一般来说,类的主要工作应该在其实例方法中完成,而构造函数应该只将实例置于可用的初始状态.

但我发现在实践中有些情况下,将基本上所有实际工作放入构造函数似乎更有意义.

一个例子:我需要从数据库中检索一些特定于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中是"非惯用的"吗?或者这是一种可接受的(虽然可能不常见)的做法?

java constructor coding-style

12
推荐指数
4
解决办法
809
查看次数

泽西jax.rs客户端2.5遵循重定向

我有一个设置,托管我的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)

rest redirect tomcat jersey-client jersey-2.0

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

将int转换为指针 - 为什么要先转换为long?(如在p =(void*)42;)

GLib文档中,有一章关于类型转换宏.在关于转换int*void指针的讨论中,它说(强调我的):

天真的,你可以试试这个,但这是不正确的:

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;
Run Code Online (Sandbox Code Playgroud)

(来源:GLib参考手册GLib 2.39.92,章节类型转换宏).

为什么演员long必要?

是否需要加宽int不作为指针演员的一部分自动发生?

c int pointers casting long-integer

12
推荐指数
5
解决办法
3万
查看次数