如果您对java.util.ServiceLoader使用感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java.util.ServiceLoader使用的详细内容,我们还
如果您对java.util.ServiceLoader 使用感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java.util.ServiceLoader 使用的详细内容,我们还将为您解答java.util.locale的相关问题,并且为您提供关于'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”、android – 解压缩zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地标题版本45”、com.intellij.util.ReflectionUtil 对方法 java.util.ResourceBundle.setParent(java.util.ResourceBundle) 的非法反射访问、CompletableFuture 源码详解之 java.util.concurrent.CompletableFuture#supplyAsync (java.util.function.Suppl...的有价值信息。
本文目录一览:- java.util.ServiceLoader 使用(java.util.locale)
- 'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”
- android – 解压缩zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地标题版本45”
- com.intellij.util.ReflectionUtil 对方法 java.util.ResourceBundle.setParent(java.util.ResourceBundle) 的非法反射访问
- CompletableFuture 源码详解之 java.util.concurrent.CompletableFuture#supplyAsync (java.util.function.Suppl...
java.util.ServiceLoader 使用(java.util.locale)
近期在项目中需要实现能在配置文件中定义多个统一接口类型的类,可以在程序中获取到所有配置的类,刚开始打算配置到 properties 中,然后去程序读取,感觉这种方式不太灵活,于是,研究研究 java 中有没有这种支持,最终确认 ServiceLoader 可以实现这种功能,下面讲解如何使用 ServiceLoader 类。
首先定义一个接口程序的定义如下:
public interface IShareniuService {
public String sayHello();
public String getScheme();
}
public class ShareniuserverImp1 implements IShareniuService {
public String sayHello() {
return "shareniu1sayHello";
}
public String getScheme() {
return "shareniu1getScheme";
}
}
public String sayHello() {
return "shareniu2sayHello";
}
public String getScheme() {
return "shareniu2getScheme";
}
需要在 META-INF/services 下以 IShareniuService 这个类的全名来新建立一个文件,文件中的内容为两个实现类的全名,如下:
所有的实现和配置都已经完成,下面写一个测试类来看一下结果:
ServiceLoader<IShareniuService> serviceLoader = ServiceLoader
.load(IShareniuService.class);
for (IShareniuService service : serviceLoader) {
System.out.println(service.getScheme()+"="+service.sayHello());
}
具体的输出来如下:
shareniu2getScheme=shareniu2sayHello
shareniu1getScheme=shareniu1sayHello
可以看到 ServiceLoader 可以根据 IShareniuService 把定义的两个实现类找出来,返回一个 ServiceLoader 的实现,而 ServiceLoader 实现了 Iterable 接口,所以可以通过 ServiceLoader 来遍历所有在配置文件中定义的类的实例
hadoop 中 FileSystem 就是通过这个机制来根据不同文件的 scheme 来返回不同的 FileSystem。
FileSystem 中的相关实例如下:
private static void loadFileSystems() {
synchronized (FileSystem.class) {
if (!FILE_SYSTEMS_LOADED) {
ServiceLoader<FileSystem> serviceLoader = ServiceLoader.load(FileSystem.class);
for (FileSystem fs : serviceLoader) {
SERVICE_FILE_SYSTEMS.put(fs.getScheme(), fs.getClass());
}
FILE_SYSTEMS_LOADED = true;
}
}
}
FileSystem 对应的配置如下:
org.apache.hadoop.fs.LocalFileSystem
org.apache.hadoop.fs.viewfs.ViewFileSystem
org.apache.hadoop.fs.s3.S3FileSystem
org.apache.hadoop.fs.s3native.NativeS3FileSystem
org.apache.hadoop.fs.kfs.KosmosFileSystem
org.apache.hadoop.fs.ftp.FTPFileSystem
org.apache.hadoop.fs.HarFileSystem
通过之前的测试类输出对应的 scheme 和 class 如下:
file=class org.apache.hadoop.fs.LocalFileSystem
viewfs=class org.apache.hadoop.fs.viewfs.ViewFileSystem
s3=class org.apache.hadoop.fs.s3.S3FileSystem
s3n=class org.apache.hadoop.fs.s3native.NativeS3FileSystem
kfs=class org.apache.hadoop.fs.kfs.KosmosFileSystem
ftp=class org.apache.hadoop.fs.ftp.FTPFileSystem
har=class org.apache.hadoop.fs.HarFileSystem
hdfs=class org.apache.hadoop.hdfs.DistributedFileSystem
hftp=class org.apache.hadoop.hdfs.HftpFileSystem
hsftp=class org.apache.hadoop.hdfs.HsftpFileSystem
webhdfs=class org.apache.hadoop.hdfs.web.WebHdfsFileSystem
可以看到 FileSystem 会把所有的 FileSystem 的实现都以 scheme 和 class 来 cache,之后就从这个 cache 中取相应的值。
因此,以后可以通过 ServiceLoader 来实现一些类似的功能。而不用依赖像 Spring 这样的第三方框架。
'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”
如何解决''java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”?
我收到此错误,我已阅读该错误以解决它我必须将 import java.util.Base64
替换为 import android.util.Base64
但在我的整个项目中我只发现 Base68 result = Base64.getEncoder().encodetoString(macData);
的唯一用法
我该如何解决?而且我不能用 android.util.Base.64 替换 java.util.Base64 因为这行代码在后端
解决方法
这很不幸 - 这意味着您正在使用某个库,而那个库正在尝试使用 /i
。 Android 选择了 Java 库,就像 android 发布时一样,现在已经是很久以前的事了。从那以后它们就没有真正更新过。 (那个 oracle v google 法庭案件可能没有帮助……)
java.util.Base64
已添加到 https://forge.autodesk.com/en/docs/design-automation/v3/reference/cmdLine/cmdLine-inventor/(有关此信息,请参阅 javadoc 中的“since”行;任何“1.6”或以下,或者如果没有“since”行,肯定可用在 android 上。其他东西通常不是)。 java 8 现在已经 7 岁了,因此不是专门为 android 设计的库越来越有可能开始使用这些非 android 库调用。
检查堆栈跟踪,您会找到正在执行此操作的库。恐怕除了停止使用这个库之外别无他法。您可以尝试在您的应用程序中粘贴 juBase64 impl,但这会相对棘手,因为这可能涉及一些法律问题,因此,要么没有人这样做,要么如果他们这样做,他们可能不会宣传如何。
您可以要求这个库使用第三方库来做 base64 工作,但他们可能不想这样做,这可能不是库无法在 android 上运行的唯一问题。
如果 android 变体是一个替代品,你可以重写这个库的类文件,但这也是一个有点笨拙、笨拙的概念,并不完全困难,但因为这不是一件正常的事情,而且通常积极不喜欢,我认为您无法轻松找到有关如何操作的文档。
因此,建议:尝试寻找另一个图书馆。
android – 解压缩zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地标题版本45”
我想提取一个普通的zip文件,但它仍然失败.
这是我现在使用的代码:
private File downloadpath = new File(Environment.getExternalStorageDirectory() + "/Test/file.zip");
private File unzipLoc = new File(Environment.getExternalStorageDirectory() + "/Test/");
FileInputStream fin = new FileInputStream(downloadpath);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null)
{
FileOutputStream fout = new FileOutputStream(unzipLoc + ze.getName());
for (int c = zin.read(); c != -1; c = zin.read())
{
fout.write(c);
}
zin.closeEntry();
fout.close();
}
zin.close();
它在’zin.getNextEntry()’部分失败.
错误:java.util.zip.ZipException:无法读取版本
有任何想法吗?谢谢!
解决方法:
看起来你的zip文件比你的’解压缩库’更新.
如果您阅读来源:
ZipInputStream(搜索新的ZipException(“无法读取版本”))
它显示它检查zip文件版本.然后查看Wikipedia它显示这是提取zip所需的最低版本.
检查您的zip文件并使用较低版本的zip软件重新保存/再次压缩,无需压缩即可测试
或者更新你的Zip库(你不能使用内部的android zip库).
com.intellij.util.ReflectionUtil 对方法 java.util.ResourceBundle.setParent(java.util.ResourceBundle) 的非法反射访问
如何解决com.intellij.util.ReflectionUtil 对方法 java.util.ResourceBundle.setParent(java.util.ResourceBundle) 的非法反射访问
我在 VSCode 中编写了一些 kotlin 代码
其中之一是:
public void readCSV(String fileName) {
fileLocation = fileName;
File csvFile = new File(fileName);
Scanner sfile;
// noOfColumns = 0;
// noOfRows = 0;
data = new ArrayList<ArrayList>();
int colCounter = 0;
int rowCounter = 0;
try {
sfile = new Scanner(csvFile);
while (sfile.hasNextLine()) {
String aLine = sfile.nextLine();
Scanner sline = new Scanner(aLine);
sline.useDelimiter(",");
colCounter = 0;
while (sline.hasNext()) {
if (rowCounter == 0)
data.add(new ArrayList<String>());
data.get(colCounter).add(sline.next());
colCounter++;
}
rowCounter++;
sline.close();
}
// noOfColumns = colCounter;
// noOfRows = rowCounter;
sfile.close();
} catch (FileNotFoundException e) {
System.out.println("File to read " + csvFile + " not found!");
}
}
当我运行它时,我得到:
fun main() {
println("Hello world")
}
它有效,但我无法隐藏或修复警告,我使用 JDK 15
我在 IntelliJ 上没有收到这些警告
CompletableFuture 源码详解之 java.util.concurrent.CompletableFuture#supplyAsync (java.util.function.Suppl...
/**
* Returns a new CompletableFuture that is asynchronously completed
* by a task running in the {@link ForkJoinPool#commonPool()} with
* the value obtained by calling the given Supplier.
*
* @param supplier a function returning the value to be used
* to complete the returned CompletableFuture
* @param <U> the function''s return type
* @return the new CompletableFuture
*/
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) {
return asyncSupplyStage(asyncPool, supplier);
}
CompletableFuture 下的 supplyAsync 方法是一个执行异步任务且有返回结果的任务,使用例子如下:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* 测试类
* @author yangchangkui
*/
public class TestMy {
public static void main(String[] args) throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "hello";
});
//判断是否已经完成
System.out.println("耗时:"+(System.currentTimeMillis()-start)+",isDone:"+completableFuture.isDone());
//阻塞获取结果
String result = completableFuture.get();
System.out.println("耗时:"+(System.currentTimeMillis()-start)+",result:"+result);
//判断是否已经完成
System.out.println("耗时:"+(System.currentTimeMillis()-start)+",isDone:"+completableFuture.isDone());
}
}
执行结果如下,显然,达到了异步执行的效果,比如在一些调用很多外部接口的聚合接口,只要接口不作为入参,那就可以进行异步执行,最后阻塞拿结果,提高接口的 QPS,提高系统性能。
今天关于java.util.ServiceLoader 使用和java.util.locale的分享就到这里,希望大家有所收获,若想了解更多关于'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 引起的 Ljava/util/Base64 解析失败 未找到类“java.util.Base64”、android – 解压缩zip文件给出“java.util.zip.ZipException:无法读取版本”或“java.util.ZipException无法读取本地标题版本45”、com.intellij.util.ReflectionUtil 对方法 java.util.ResourceBundle.setParent(java.util.ResourceBundle) 的非法反射访问、CompletableFuture 源码详解之 java.util.concurrent.CompletableFuture#supplyAsync (java.util.function.Suppl...等相关知识,可以在本站进行查询。
本文标签: