我正在研究客户端/服务器系统,我正在尝试进行一些基本的加密.当我连接到服务器时,我将一个公钥作为转义字符串发送到套接字.我已经验证字符串在两端,换行符和所有字符串都是相同的.
在客户端(Android)上,我能够使用公钥/私钥成功加密和解密密钥(用于测试目的).但是,当尝试将公钥从String解码为byte []时,服务器立即失败,其中:
java.lang.IllegalArgumentException: Illegal base64 character a
Run Code Online (Sandbox Code Playgroud)
这似乎是荒谬的,因为'a'绝对是一个base64字符,如果我理解正确的话.客户端和服务器使用共享库来处理所有加密,因此代码几乎完全相同.的唯一差别是编码/解码的base64字符串,由于java.util.Base64是在Android不可用.
共享课程
public abstract class EasyCrypt {
...
public PublicKey loadPublicKey(String key64) throws GeneralSecurityException {
byte[] data = decode(key64); //Calls abstract methods, shown below
X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
KeyFactory fact = KeyFactory.getInstance("RSA");
return fact.generatePublic(spec);
}
...
}
Run Code Online (Sandbox Code Playgroud)
客户端(Android)方法
import android.util.Base64;
public class ClientCrypt extends EasyCrypt {
@Override
protected byte[] decode(String s) {
return Base64.decode(s.getBytes(), Base64.DEFAULT); //Works perfectly
}
@Override
protected String encode(byte[] bytes) {
return Base64.encodeToString(bytes, Base64.DEFAULT); …Run Code Online (Sandbox Code Playgroud) 我正在尝试初始化 VLCJ 以执行一些流式传输,作为我正在开发的应用程序的一部分。按照官方教程,我使用以下代码来尝试加载库:
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "/Applications/VLC/Contents/MacOS/lib"
);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'vlc': JNA native support (darwin/libvlc.dylib) not found in resource path (/Users/iamparker/Documents/workspace/VLCStreamer/target/classes:/usr/jar/vlc/vlcj-3.0.1-javadoc.jar:/usr/jar/vlc/vlcj-3.0.1-sources.jar:/usr/jar/vlc/vlcj-3.0.1-test-sources.jar:/usr/jar/vlc/vlcj-3.0.1-tests.jar:/usr/jar/vlc/vlcj-3.0.1.jar:/usr/jar/vlc/jna-4.1.0.jar:/usr/jar/vlc/jna-platform-4.1.0.jar)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)
at com.sun.jna.Library$Handler.<init>(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:387)
at com.sun.jna.Native.loadLibrary(Native.java:366)
at com.thundercats.vlcstreamer.Main.loadNative(Main.java:33)
at com.thundercats.vlcstreamer.Main.main(Main.java:16)
Run Code Online (Sandbox Code Playgroud)
看起来它甚至没有搜索我给它的路径。该目录中有一个非常好的 libvlc.dylib 。
以下是运行 VLCJ NativeDiscoveryTest 的输出:
vlcj: (Info.java:70) | INFO | vlcj: <version not available>
vlcj: (Info.java:71) | INFO | java: 1.6.0_65 Apple Inc.
vlcj: (Info.java:72) | INFO | java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
vlcj: …Run Code Online (Sandbox Code Playgroud) 我在OSX上制作一个简单的图形应用程序.我刚开始通过检查帧之间系统时间的差异来监视帧速率.它似乎每隔几帧悬挂一下.
该应用程序在NSTimer对象上运行,目前设置为200 fps(5毫秒帧).为了确保它不仅仅是我的主代码很慢,我注释掉了整个主循环,除了[self.context flushBuffer]; (当然还有帧率采样代码).即使重复这一次调用,也会导致它一次挂起几帧.这是我的控制台输出的示例:
4
5
6
10
5
5
5
4
6
10
5
5
5
5
5
5
20
4
5
6
20
5
5
5
Run Code Online (Sandbox Code Playgroud)
这是每次循环迭代之间的时间(以毫秒为单位).在200帧/秒时,每帧应该约为5毫秒,但它会反复挂起10,15甚至20毫秒.正如你在-initOpenGL函数中看到的那样,Vsyncing被禁用了.
-(void)initOpenGL{
NSOpenGLPixelFormatAttribute attributes[] = {NSOpenGLPFADoubleBuffer, 0};
NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes: attributes];
self.context = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil];
[self.context setView:[self.window contentView]];
[self.context makeCurrentContext];
//Disable Vsync
int temp = 0;
[self.context setValues: &temp forParameter: NSOpenGLCPSwapInterval];
glViewport(0, 0, windowWidth, windowHeight);
glMatrixMode(GL_PROJECTION);
glOrtho(0, windowWidth, 0, windowHeight, -1, 100);
//Flip all textures right …Run Code Online (Sandbox Code Playgroud) macos ×2
android ×1
base64 ×1
frame-rate ×1
java ×1
libvlc ×1
objective-c ×1
opengl ×1
vlcj ×1