Java ObjectInputStream中有两个类似的方法:
和
文档指出:
public Object readUnshared() throws IOException, ClassNotFoundException从 ObjectInputStream 读取“非共享”对象。此方法与 readObject 相同,只不过它阻止对 readObject 和 readUnshared 的后续调用返回对通过此调用获得的反序列化实例的其他引用。具体来说:
如果调用 readUnshared 来反序列化反向引用(之前已写入流的对象的流表示形式),则会抛出 ObjectStreamException。
如果 readUnshared 成功返回,则任何后续尝试反序列化对 readUnshared 反序列化的流句柄的反向引用都将导致抛出 ObjectStreamException。
通过 readUnshared 反序列化对象会使与返回的对象关联的流句柄无效。请注意,这本身并不总是保证 readUnshared 返回的引用是唯一的;反序列化对象可以定义一个 readResolve 方法,该方法返回对其他方可见的对象,或者 readUnshared 可以返回可在流中的其他位置或通过外部方式获取的 Class 对象或枚举常量。如果反序列化对象定义了 readResolve 方法并且调用该方法返回一个数组,则 readUnshared 返回该数组的浅表克隆;这保证了返回的数组对象是唯一的,并且无法通过对 ObjectInputStream 调用 readObject 或 readUnshared 再次获取,即使底层数据流已被操作。
重写此方法的 ObjectInputStream 子类只能在拥有“enableSubclassImplementation”SerializedPermission 的安全上下文中构造;任何在没有此权限的情况下实例化此类子类的尝试都将导致抛出 SecurityException。
但我想知道是否有人在现实生活中对此有.readUnshared()用途.readObject()
我们最近将我们的 Oracle 数据库配置为所谓的native encryption(Oracle Advanced Security Option)。
随着开发的进行,有些SQL查询有时会写得很糟糕,因此JDBC驱动程序应该返回一个错误( ojdbc7 v12.1.0.2)。取而代之的是, aChecksum Fail IOException被提出。
所以问题是我们根本没有任何语法或数据库完整性错误。这个问题在 SQL GUI 编辑器中是一样的,比如DBeaver,SQLDeveloper或SQuirrel.
我在 Java 7 上工作。
我想知道该方法contains在 HashSet 对象上是否是线程安全的。
HashSet 由一个线程初始化。然后我们用不可修改的集合 ( Collections.unmodifiableSet)包装 HashSet 。初始化后,多个线程只调用方法contains。
当我阅读 Javadoc 时,我不清楚。
在HashSet Javadoc 上,我们可以阅读
这个类实现了 Set 接口,由一个哈希表(实际上是一个 HashMap 实例)支持。
...
请注意,此实现不是同步的。
在HashMap Javadoc 上,我们可以阅读:
请注意,此实现不是同步的。如果多个线程并发访问一个散列映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。(结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。)
对我来说,这意味着该方法contains不是结构修改。
那么多次调用该方法contains是线程安全的吗?
如果是真的:它是否在所有 JVM 实现(如 IBM JVM)上都有保证?
我正在尝试创建 GUI 示例,当用户单击按钮时删除文件和/或目录,但我看到文件被永久删除,如何使其移动到回收站而不是这个
if (File_path.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "Please select a file or directory", "Info", JOptionPane.INFORMATION_MESSAGE);
} else {
File FileName = new File(File_path.getText());
boolean FileDeleted = FileName.delete();
if (FileDeleted == true) {
JOptionPane.showMessageDialog(null, "File Deleted Successfully", "Info", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "File Not Found", "Info", JOptionPane.INFORMATION_MESSAGE);
}
}
Run Code Online (Sandbox Code Playgroud) 我在 CentOS Linux 版本 7.3.1611 服务器上使用 Jenkins 版本 2.73-1.1。
服务器上有3个不同版本的JDK:
[root @ jenkins java] # ll
total 12
lrwxrwxrwx. 1 root root 16 27 Apr 16.25 default -> / usr / java / latest
drwxr-xr-x. 8 root root 4096 27 Mar 2013 jdk1.6.0_45
drwxr-xr-x. Root root 4096 11 Apr 2015 jdk1.7.0_80
drwxr-xr-x. 9 root root 4096 27 Apr 16.25 jdk1.8.0_131
lrwxrwxrwx. 1 root root 22 27 apr 16.25 latest -> /usr/java/jdk1.8.0_131
Run Code Online (Sandbox Code Playgroud)
如下图所示,Jenkins使用的是jdk1.8.0_131版本,在我的项目中我指定使用JDK7。
当我尝试编译我的项目 ( …
我需要在远程服务器中使用elasticsearch,该服务器有jdk 1.7并且我的ES 5.4支持jdk 1.8
所以我需要将其配置为指向 JDK 1.8 的路径我无法更新 JAVA_HOME
你能告诉我该怎么做吗?我应该更新哪个文件
如果只有一个路径具有根组件,则无法构建相对路径.
为什么会这样?为什么不可能像这样重新激活:
Path path1 = Paths.get("/home/test");
Path path2 = Paths.get("home");
// throws an IllegalArgumentException
Path path3 = path1.relativize(path2);
Run Code Online (Sandbox Code Playgroud)
我曾经想过path3会导致相对路径../.Path如果没有定义根元素,为什么返回一个表示文件系统中两个目录位于同一级别的结果是有效的,但是,当只有一个路径定义根元素时(如上所示),没有相对路径可以有待确定?
即
Path path1 = Paths.get("home/test");
Path path2 = Paths.get("user");
// results in ../../user
Path path3 = path1.relativize(path2);
Run Code Online (Sandbox Code Playgroud) 我正在尝试打包游戏!针对Java 7构建的应用程序.我收到此错误.此外,我无法从命令行启动应用程序,但从Eclipse可以运行.
D:\Dropbox\eclipseProjectsClassic>play war MyApp -o MyApp.war --zip
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2.3, http://www.playframework.org
~
Listening for transport dt_socket at address: 8000
04:17:03,694 INFO ~ Starting D:\Dropbox\eclipseProjectsClassic\MyApp
Exception in thread "main" java.lang.UnsupportedClassVersionError: DocViewerPlugin : Unsupported maj
or.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java
:158)
at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84) … 当我将项目移动到java7时,Drools在init进程中开始抛出RuntimeDroolsException异常.当我进一步挖掘时,我发现当它验证java方言时会发生这种情况.
问题是:Drools 5.1.1将"java.version"系统属性与LANGUAGE_LEVELS进行比较以验证它.LANGUAGE_LEVELS是直到1.6的java版本的硬编码列表
In org.drools.rule.builder.dialect.java.JavaDialectConfiguration,
public static final String[] LANGUAGE_LEVELS = new String[]{"1.5", "1.6"};
Run Code Online (Sandbox Code Playgroud)
我不想改变源代码.所以我添加了以下作为绕过java方言验证的解决方法.
Properties properties = new Properties();
properties.setProperty( "drools.dialect.java.compiler.lnglevel","1.6" );
PackageBuilderConfiguration cfg =
new PackageBuilderConfiguration( properties );
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(cfg);
Run Code Online (Sandbox Code Playgroud)
除了编辑源代码之外,还有更好的方法吗?
PS:Drools 5.1.1是drools的最新生产版本
我尝试用Java 7在PROD模式下运行我的播放应用程序,我很惊讶.预编译失败:
10:28:18,819 INFO ~ Precompiling ...
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0xb6ed766c, pid=27336, tid=2673077104
#
# JRE version: 7.0_01-b08
# Java VM: Java HotSpot(TM) Server VM (21.1-b02 mixed mode linux-x86 )
# Problematic frame:
# V [libjvm.so+0x4fc66c] PhaseIdealLoop::build_loop_late_post(Node*)+0x15c
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error …Run Code Online (Sandbox Code Playgroud) java-7 ×10
java ×7
java-8 ×2
oracle ×2
collections ×1
concurrency ×1
drools ×1
encryption ×1
file ×1
jdbc ×1
jenkins ×1
nio ×1
rule-engine ×1
swing ×1