我有一个IFile
对象需要用作java.io.File对象.我正在使用以下代码进行转换.
file = ifile.getFullPath().toFile();
Run Code Online (Sandbox Code Playgroud)
但是对file.exists()
返回的调用是错误的.
我的 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决赛,我被一种简单的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) 我使用 Apache HttpClient 4.1.2 将压缩的二进制数据(序列化的 Java 对象)POST 到服务器。
有时(20% 的时间)客户端会在接收响应时超时,即使服务器正确响应并在其自己的日志记录中记录了“200”响应。
事件的顺序是:
服务器返回的响应主体是一个很小的纯文本字符串,例如五个字节或更少,例如“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) 我有这个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标签.
我需要使用visual basic的java类6.我应该如何声明java类?我需要收到4个字符串,我该如何收到它们?如何从Visual Basic 6中调用此类?我该如何处理返回值?
当你意识到我对此很新,并感谢你的帮助.
我需要在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) 我有两个字符串数组键和值
String[] keys = {a,b,c,d};
String[] values = {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)
将它们转换为地图的最快方法是什么?我知道我们可以遍历它们.但是,有没有任何实用工具?
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)
请问有更好的方法吗?
假设我有两个功能,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或其他优雅方式进行评估,在没有辅助变量的情况下将其写入一行?