我已经搜索了很长一段时间,但所有结果都指向了Java 7之前的NIO解决方案.我已经使用NIO的东西从文件系统的特定位置读取文件,它比之前(Files.readAllBytes(path))更容易.现在,我想读取一个打包在WAR和类路径中的文件.我们目前使用类似于以下的代码执行此操作:
Input inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
/* iterate through the input stream to get all the bytes (no way to reliably find the size of the
* file behind the inputStream (see http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()))
*/
int byteInt = -1;
try
{
byteInt = inputStream.read();
while (byteInt != -1)
{
byteStream.write(byteInt);
byteInt = inputStream.read();
}
byteArray = byteStream.toByteArray();
inputStream.close();
return byteArray;
}
catch (IOException e)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但我希望有一个更容易/更好的方法来使用Java 7中的NIO.我猜我需要在类路径上获得一个表示此路径的Path对象,但我是不知道该怎么做.
如果这是一件非常容易的事,我道歉.我只是想不出来.谢谢您的帮助.
我对我的游戏项目做了一些修改,当我尝试运行它时,我得到了错误.
>play run
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occured. Program will exit.
Run Code Online (Sandbox Code Playgroud)
这是个常见的问题吗?我对游戏框架相当缺乏经验,但我之前已多次运行我的项目而没有遇到此错误.
编辑:有关Java版本的信息.
>java -version
java version "1.7.0_11"
Java(TM) Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) Client VM (build 23.6-b04, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud) 在阅读之后(再次,应该已经做了很久以前)正确实现equals和hashcode我得出了这些结论,这对我有用:
如果在JDK 7之前:首选使用Apache commons equalsbuilder和hashcodebuilder.(或番石榴).他们的javadoc包含如何以良好方式使用它们的示例.
如果是JDK 7 ++:使用新的Objects实用程序类
但是,如果为hibernate编写一些特殊的请求出现(参见更远的源代码)其中推荐使用instanceof而不是getClass,因为hibernate创建了延迟加载的子类的代理.
但据我所知,如果这样做又发生了另一个潜在的问题:使用getClass的原因是为了确保equals合约的对称属性.JavaDoc中:
*It is symmetric: for any non-null reference values x and y, x.equals(y)
should return true if and only if y.equals(x) returns true.*
Run Code Online (Sandbox Code Playgroud)
通过使用instanceof,它可能不是对称的.示例:B扩展A. A的等于A的检查实例.B的等于B的实例检查.给A a和B b:
a.equals(b) - > true b.equals(a) - > false
如何实现与hibernate相等而不会失去对称属性的风险?使用getClass时我似乎不安全,使用instanceof时我不安全?
答案是永远不要将重要成员添加到子类,然后使用instanceof是安全的(对于hibernate)?
我读到的消息来源:
在Java中覆盖equals和hashCode时应该考虑哪些问题?
Josh Blochs的第7和第8项优秀书籍"Effective Java",http: //web.archive.org/web/20110622072109/http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf
关于Java 7:http://www.javacodegeeks.com/2012/11/guavas-objects-class-equals-hashcode-and-tostring.html
List<String> list = new ArrayList(); 将导致编译器警告.
但是,以下示例编译时没有任何警告: List<String> list = new ArrayList<>();
我很好奇为什么需要引入钻石操作员.为什么不只是对构造类型推断,如果类型参数是不存在(因为它已经在Java静态方法做,像谷歌番石榴集合库开发)
编辑:使用millimoose答案作为起点我查看了实际上是什么类型的擦除,它不只是删除所有类型信息.编译器实际上做了一些(从官方文档复制):
我在Windows 7上安装了WAS 8.5 试用版.我想部署并运行Java 7应用程序.有可能吗?
我无法在IBM Installation Manager的功能列表中看到"IBM WebSphere SDK for Java Technology Edition 7",但尚未安装SDK 7.
>managesdk.bat -listAvailable
CWSDK1003I: Available SDKs :
CWSDK1005I: SDK name: 1.6_64
CWSDK1001I: Successfully performed the requested managesdk task.
>
Run Code Online (Sandbox Code Playgroud)
有人设法让WAS 8.5试用版和Java 7在Windows 7上一起工作吗?
提前致谢!
我正在使用eclipse开发一个Web应用程序,当我试图在eclipse中运行我的应用程序时,我遇到了一个问题.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f41e4e610b0, pid=3463, tid=139924549404416
#
# JRE version: 7.0_09-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.5-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libwebkitgtk-1.0.so.0+0x11670b0] void WTF::freeOwnedGPtr<_GdkEvent>(_GdkEvent*)+0x15e00
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to …Run Code Online (Sandbox Code Playgroud) 当我去官方网站下载Java JDK并尝试下载JDK时,我收到一条错误消息,指出Oracle下载站点的SSL证书无效.
经过一些谷歌搜索后,证书似乎从未有效(或在很长一段时间内无效).
Firefox中的错误显示"此连接不受信任",技术细节说:
download.oracle.com uses an invalid security certificate.
The certificate is only valid for the following names: *.akamaihd.net, *.akamaihd-staging.net, a248.e.akamai.net, *.akamaized.net, *.akamaized-staging.net
Run Code Online (Sandbox Code Playgroud)
在Chrome中,错误显示"您的连接不是私密的",并在预先信息中显示类似的消息.
经过很长时间的寻找,我可以通过常用的搜索引擎找到关于这个问题的非常少的信息.
为什么证书无效,获取文件的可靠方法是什么?
有一个类层次结构:
String child = null;
Object parent = child;
Run Code Online (Sandbox Code Playgroud)
如何强制Sets.newHashSet(E...)返回Set<Object>传递String参数?
这在最近的一个项目中让我烦恼,我的Google phoo让我无法找到合适的答案.
是否有一个集合,可以访问,ListIterator但也只允许集合内的唯一值?
为此推理,我有一个项目集合,在这个集合中应该只有每个元素之一.我也希望能够在两个方向上遍历这个集合.我希望它可以被排序或允许我使用它进行排序Collections.Sort();
我找不到任何合适的东西,不得不使用以下代码编写自己的类:
public class UniqueArrayList<E> extends ArrayList<E> {
@Override
public boolean add(E element){
if (this.contains(element))
return false;
else
return super.add(element);
}
@Override
public void add(int index, E element){
if (this.contains(element))
return;
else
super.add(index, element);
}
@Override
public boolean addAll(Collection<? extends E> c){
if (new HashSet<E>(c).size() < c.size())
return false;
for(E element : c){
if (this.contains(c))
return false;
}
return super.addAll(c);
}
@Override
public boolean addAll(int index, Collection<? extends E> c) {
if (new HashSet<E>(c).size() …Run Code Online (Sandbox Code Playgroud) java-7 ×10
java ×9
classpath ×1
collections ×1
eclipse ×1
generics ×1
hashcode ×1
heap-memory ×1
hibernate ×1
instanceof ×1
io ×1
list ×1
memory ×1
set ×1
ssl ×1
tomcat ×1
websphere-8 ×1