标签: java-7

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

使用Java 7 NIO从classpath读取文件

我已经搜索了很长一段时间,但所有结果都指向了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对象,但我是不知道该怎么做.

如果这是一件非常容易的事,我道歉.我只是想不出来.谢谢您的帮助.

java io classpath java-7

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

Play Framework - 无法为对象堆保留足够的空间

我对我的游戏项目做了一些修改,当我尝试运行它时,我得到了错误.

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

java memory heap-memory java-7 playframework-2.0

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

如何实现与hibernate相等而不会失去对称属性的风险?

在阅读之后(再次,应该已经做了很久以前)正确实现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

java hibernate instanceof hashcode java-7

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

为什么在Java 7中使用菱形运算符进行类型推断?

List<String> list = new ArrayList(); 将导致编译器警告.

但是,以下示例编译时没有任何警告: List<String> list = new ArrayList<>();

我很好奇为什么需要引入钻石操作员.为什么不只是对构造类型推断,如果类型参数是不存在(因为它已经在Java静态方法做,像谷歌番石榴集合库开发)

编辑:使用millimoose答案作为起点我查看了实际上是什么类型的擦除,它不只是删除所有类型信息.编译器实际上做了一些(从官方文档复制):

  • 如果类型参数是无界的,则用泛型或对象替换泛型类型中的所有类型参数.因此,生成的字节码仅包含普通的类,接口和方法.
  • 如有必要,插入类型铸件以保持类型安全.
  • 生成桥接方法以保留扩展泛型类型中的多态性.

java type-inference diamond-operator java-7

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

是否可以将Java 7与IBM WebSphere Application Server 8.5试用版一起使用

我在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上一起工作吗?

提前致谢!

java-7 websphere-8

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

如何修复运行java时"无法写入核心转储.核心转储已被禁用"错误

我正在使用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 eclipse tomcat java-7

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

有没有一种安全的方式来下载java JDK?

当我去官方网站下载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中,错误显示"您的连接不是私密的",并在预先信息中显示类似的消息.

经过很长时间的寻找,我可以通过常用的搜索引擎找到关于这个问题的非常少的信息.

为什么证书无效,获取文件的可靠方法是什么?

java ssl java-7

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

如何强制使用静态泛型方法的返回类型?

有一个类层次结构:

String child = null;
Object parent = child;
Run Code Online (Sandbox Code Playgroud)

如何强制Sets.newHashSet(E...)返回Set<Object>传递String参数?

java generics java-7

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

使用ListIterator的集合,是一个唯一的列表

这在最近的一个项目中让我烦恼,我的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 collections list set java-7

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