我知道使用BufferedReader(包装FileReader)将比使用BufferedInputStream(包装FileInputStream)慢得多,因为原始字节必须转换为字符.但我不明白为什么它这么慢!以下是我正在使用的两个代码示例:
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename));
try {
byte[] byteBuffer = new byte[bufferSize];
int numberOfBytes;
do {
numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize);
} while (numberOfBytes >= 0);
}
finally {
inputStream.close();
}
Run Code Online (Sandbox Code Playgroud)
和:
BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize);
try {
char[] charBuffer = new char[bufferSize];
int numberOfChars;
do {
numberOfChars = reader.read(charBuffer, 0, bufferSize);
} while (numberOfChars >= 0);
}
finally {
reader.close();
}
Run Code Online (Sandbox Code Playgroud)
我已尝试使用各种缓冲区大小的测试,所有缓冲区大小都是150兆字节的文件.以下是结果(缓冲区大小以字节为单位;时间以毫秒为单位):
Buffer Input
Size Stream Reader
4,096 145 497
8,192 125 465
16,384 …Run Code Online (Sandbox Code Playgroud) 是否可以重新发送RequestFactory传输?我想做相同的事情:如何在使用RequestFactory时重新发送GWT RPC请求.从先前的请求重新发送相同的有效负载相当简单,但我还需要调用相同的方法.这是我的RequestTransport类,我希望在处理用户登录凭据的请求之后,只需"重新启动"原始请求:
package org.greatlogic.rfexample2.client;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport;
/**
* Every request factory transmission will pass through the single instance of this class. This can
* be used to ensure that when a response is received any global conditions (e.g., the user is no
* longer logged in) can be handled in a consistent manner.
*/
public class RFERequestTransport extends DefaultRequestTransport {
//--------------------------------------------------------------------------------------------------
private IClientFactory _clientFactory;
//==================================================================================================
private final class …Run Code Online (Sandbox Code Playgroud) 我试图使用ILaunchManager#getLaunchConfigurationsEclipse org.eclipse.debug.core包中的方法,但编译器给我的消息是:
The method getLaunchConfigurations() from the type ILaunchManager refers to the missing type CoreException
我可以看到getLaunchConfigurations()抛出CoreException异常,但我找不到包含CoreException该类的jar !有谁知道我需要用哪个罐来解决这个问题?
我正在使用的代码是:
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
for (ILaunchConfiguration launchConfiguration : launchManager.getLaunchConfigurations()) {
String configName = launchConfiguration.getName();
}
Run Code Online (Sandbox Code Playgroud)
我在构建路径中包含了以下jar:
org.eclipse.debug.core_3.7.100.v20120521-2012
org.eclipse.core.runtime_3.8.0.v20120521-2346
Run Code Online (Sandbox Code Playgroud) 我试图用 JavaScript 加密一个短字符串并用 Java 解密它。解密失败,我认为这是因为两个平台之间的块模式和/或填充不同。我尝试在Java和JavaScript中加密相同的字符串,得到不同的结果,这表明确实存在差异。这是创建密钥的 Java 代码:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)
这是我用来测试加密的 Java 代码:
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] bytes = cipher.doFinal("asdf".getBytes());
Run Code Online (Sandbox Code Playgroud)
我将公钥发送到 JavaScript 进程,并将其转换为 ArrayBuffer,变量名为publicKey。我已经验证了 JavaScript 端的密钥与 Java 端的密钥匹配(通过导出它crypto.subtle.exportKey并检查字节)。这是我用来测试加密的 JavaScript 代码:
crypto.subtle.importKey('spki', publicKey,
{hash: 'SHA-256', name: 'RSA-OAEP'}, true,
['encrypt'])
.then((key) => {
crypto.subtle.encrypt({name: 'RSA-OAEP'}, key,
new TextEncoder().encode('asdf'))
.then((buffer) => {
});
});
Run Code Online (Sandbox Code Playgroud)
Java 中的字节数组和 JavaScript 中的数组缓冲区的内容是不一样的。我不确定的设置是Cipher#getInstanceJava 端的参数importKey和encryptJavaScript 端的参数。是否有任何设置可以使用内置类在 Java 和 JavaScript 之间工作?或者我应该查看第三方库(例如,Bouncy …