小编Bhe*_*ung的帖子

将IFile转换为File

我有一个IFile对象需要用作java.io.File对象.我正在使用以下代码进行转换.

file = ifile.getFullPath().toFile();
Run Code Online (Sandbox Code Playgroud)

但是对file.exists()返回的调用是错误的.

java eclipse

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

java项目中所有类的单元测试可序列化性

我的 java 项目中有数千个类。其中一些实现了可序列化接口。现在有一个问题。有人可能可以进入一个类,添加既不是瞬态也不是可序列化的新变量。代码编译得很好,但进程会在运行时崩溃。

为了说明这一点

class Foo implements Serializable {  .... // all good }

class Foo implements Serializable 
{  
    // OOps, executorService is not serializable.  It's not declared as transient either 

    private ExecutorService executorService = ..
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑编写一个单元测试来遍历所有类并确保“真正的可串行化”。我读过一些有关序列化特定对象的讨论。我理解这个过程,但它需要

1)创建一个对象。
2)序列化,然后
3)反序列化。

有没有更高效、实用的方法。也许要使用反射。遍历所有类,如果类具有可序列化,则所有属性都必须可序列化或具有瞬态关键字。

想法?

java serialization unit-testing

5
推荐指数
1
解决办法
5579
查看次数

数组的平等方法如何工作?

嘿,我正在学习Java决赛,我被一种简单的equals方法弄糊涂了.

给出的问题是

"鉴于以下数组声明,以下打印是什么"

并且我认为这是真的,错误的,但是在复制和粘贴代码后它会显示答案是错误的,错误的,真实的.

我明白,==当它们是对象的同一个实例时,它才有效,但我不明白为什么第一个是错误的.我尝试在数组api中找到方法,但找不到具有相同参数的方法.

请原谅我,如果这是显而易见的,我在学习过去的几个晚上一直很晚,而且现在对咖啡因感到厌倦.

int[] d = { 1, 2, 3 };
int[] b = { 1, 2, 3 };
int[] c = d;
System.out.println(d.equals(b));
System.out.println(d == b);
System.out.println(d == c);
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
3850
查看次数

服务器响应后Apache HttpClient超时异常

我使用 Apache HttpClient 4.1.2 将压缩的二进制数据(序列化的 Java 对象)POST 到服务器。

有时(20% 的时间)客户端会在接收响应时超时,即使服务器正确响应并在其自己的日志记录中记录了“200”响应。

事件的顺序是:

  • 客户端 POST 数据到服务器 (T0)。
  • 服务器记录数据接收(T2,即T + 2 秒)。
  • 服务器处理数据。
  • 服务器记录处理的成功完成 (T45)。
  • 服务器访问日志显示以“200”状态(T46)发出的已完成响应。
  • 客户端阻止读取响应头。
  • 客户端超时(T1800,即 POST 请求后 30 分钟,这是我使用的标准超时)。

服务器返回的响应主体是一个很小的纯文本字符串,例如五个字节或更少,例如“OK”。

这里会发生什么?如果服务器没有响应,我可以理解超时;但服务器已经响应,并及时记录了正确的响应,早在客户端超时之前。客户端似乎“试图”读取响应,但阻塞并最终超时。

客户端运行在 Windows XP 机器上;服务器是 Ubuntu。两者都在运行 Java 6(现在是 1.6.29)。

DefaultHttpClient在每个请求上创建一个新对象,并在每个请求后关闭它(并适当地释放其他资源)。

客户端在请求成功完成后消费和处理响应实体主体,但我们还没有到那一步 - 超时发生在httpclient.execute(方法)调用的上下文中。

堆栈跟踪:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
    at org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:115)
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298) …
Run Code Online (Sandbox Code Playgroud)

java apache timeout httpclient

5
推荐指数
1
解决办法
7122
查看次数

如何在struts中使用foreach

我有这个struts代码,我正在使用forEach-

<c:forEach items="${reviewList}" var="reviewListId">
<tr>
   <td colspan="6" class="we_have"><c:out value="${reviewListId}" />
   </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

我添加了这个taglib

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
Run Code Online (Sandbox Code Playgroud)

但代替forEach标签显示的错误是 -

根据标记文件中的TLD或属性指令,属性项不接受任何表达式

但是代替标签lib它没有显示任何错误,这意味着它支持这个标签lib,但不知道为什么它不支持forEach标签.

java foreach struts

5
推荐指数
1
解决办法
5668
查看次数

从Visual Basic 6调用Java方法

我需要使用visual basic的java类6.我应该如何声明java类?我需要收到4个字符串,我该如何收到它们?如何从Visual Basic 6中调用此类?我该如何处理返回值?

当你意识到我对此很新,并感谢你的帮助.

java vb6

5
推荐指数
1
解决办法
1526
查看次数

Java Servlet中的ExecutorService

我需要在java servlet中同时执行一些任务(主要是使用请求参数和读取数据调用多个外部URL)并在几秒钟内向用户发送响应.我正在尝试使用ExecutorService来实现相同的目的.我需要在doGet方法中的每个用户请求中创建四个FutureTasks.每个任务运行大约5-10秒,对用户的总响应时间约为15秒.

在Java servlet中使用ExecutorService时,能否建议以下哪种设计更好?

1)(为每个请求创建newFixedThreadPool并尽快关闭它)

public class MyTestServlet extends HttpServlet
{

    ExecutorService myThreadPool = null;

    public void init()
    {
          super.init();

    }
    protected void doGet(HttpServletRequest request,HttpServletResponse response)
    {

        myThreadPool = Executors.newFixedThreadPool(4);
        taskOne   = myThreadPool.submit();
        taskTwo   = myThreadPool.submit();        
        taskThree = myThreadPool.submit();
        taskFour  = myThreadPool.submit();

        ...
        ...

        taskOne.get();
        taskTwo.get();
        taskThree.get();
        taskFour.get();

        ...

        myThreadPool.shutdown();


    }

     public void destroy()
     {

         super.destroy();
     }

}
Run Code Online (Sandbox Code Playgroud)

2)(在Servlet Init期间创建newFixedThreadPool并在servlet destroy上关闭它)

public class MyTestServlet extends HttpServlet
{

    ExecutorService myThreadPool = null;

    public void init()
    {
      super.init();
          //What should be the …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading servlets java-ee

5
推荐指数
1
解决办法
5262
查看次数

将字符串数组转换为Map

我有两个字符串数组键和值

String[] keys = {a,b,c,d};

String[] values = {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

将它们转换为地图的最快方法是什么?我知道我们可以遍历它们.但是,有没有任何实用工具?

java arrays hashmap

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

list.toArray(T [] a),如果"T"是"运行时类型"怎么办?

list.toArray(T[] a),如果T是"运行时类型"怎么办?

" List"接口在Java中,方法:T[] toArray(T[] a)
好的,这是一个很老的问题,通常我们这样使用它:

String[] array = list.toArray(new String[0]);
String[] array = list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道编码时类型"T"是什么,类型"T"只能在运行时决定,这里是示例:

List list=...;  // no generic type declared on this List
Class<?> clazz=...; //yeah, this is the real type of the element of the list, I can sure about that
Run Code Online (Sandbox Code Playgroud)

现在我需要将列表转换为元素类型为clazz的数组,我该怎么办?

可能你想知道为什么我有这种需要:
我对Morphia进行了一些修改(这是一个java-mongoDB框架).我需要从mongoDB获取数据并将其设置为POJO的右侧字段.在某些情况下,字段类型是数组,所获取的数据是BasicDBList实体(它扩展了ArrayList),因此BasicDBList实体必须转换为类型与POJO字段兼容的数组.

我查看了ArrayList的源代码,然后用一些丑陋的代码实现了我的目标:

List list=...;
Class<?> clazz=...;
Object targetArray=Array.newInstance(clazz, list.size());
list.toArray((Object[])targetArray);
Run Code Online (Sandbox Code Playgroud)

请问有更好的方法吗?

java generics list toarray

5
推荐指数
2
解决办法
636
查看次数

如何防止短路?

假设我有两个功能,boolean fA()并且boolean fB()

如果我写另一个函数function(boolean b),我调用function(fA()||fB())然后fB()可能不执行,如果fA()返回true.

我喜欢这个功能,但在这里我需要两个函数来执行.明显的实施:

boolean temp = fA();
function(fB()||temp);
Run Code Online (Sandbox Code Playgroud)

是丑陋的,需要额外的线条使其不太可读.

有没有办法强制用Java或其他优雅方式进行评估,在没有辅助变量的情况下将其写入一行?

java short-circuiting logical-operators

5
推荐指数
1
解决办法
188
查看次数