我正在使用sun.misc.BASE64Encoder包中的encode()方法.如何抑制它生成的编译器警告?
sun.misc.BASE64Encoder是Sun专有的API,可能会被删除
作为后续,我为什么不在Eclipse中看到这个警告?
我一直试图弄清楚使用GZIPOutputStream之类的东西,但是在理解它们方面没有成功.我想做的就是将一串字符 - "一串字符"转换为GZIP Base64格式.我怎样才能做到这一点?
编辑: 通过GZIP Base64格式,我的意思是首先使用GZIP压缩字符串,然后转换为Base64
我试图解决这个问题,但我从来没有找到适合我的解决方案.问题是我正在接受有关BASE64Encoder的警告.没有BASE64Encoder,有没有其他方法可以做到这一点?
代码:
public static String Encrypt(String Data) throws Exception
{
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = new BASE64Encoder().encode(encVal); //Here is the problem
return encryptedValue;
}
public static String Decrypt(String encryptedData) throws Exception
{
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData); //Another problem
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
private static Key generateKey() throws Exception
{ …Run Code Online (Sandbox Code Playgroud) 我必须将一个短字符串作为文本从客户端发送到服务器,然后发送一个二进制文件.
如何使用相同的套接字连接发送二进制文件和字符串?
服务器是一个Java桌面应用程序,客户端是Android平板电脑.我已经将其设置为在两个方向上在客户端和服务器之间发送文本消息.我还没有完成二进制文件发送部分.
一个想法是设置两个单独的服务器同时运行.我认为如果我使用两个不同的端口号并在应用程序中的两个不同线程上设置服务器,这是可能的.我将不得不设置在Android应用程序中的两个服务上运行的两个并发客户端.
另一个想法是以某种方式使用if else语句来确定发送两种类型文件中的哪一种(二进制文本),并使用适当的方法接收正在发送的文件类型的文件.
发送文本的示例代码
PrintWriter out;
BufferedReader in;
out = new PrintWriter(new BufferedWriter
(new OutputStreamWriter(Socket.getOutputStream())) true,);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("test out");
String message = in.readLine();
Run Code Online (Sandbox Code Playgroud)
发送二进制文件的示例代码
BufferedOutputStream out;
BufferedInputStream in;
byte[] buffer = new byte[];
int length = 0;
out = new BufferedOutputStream(new FileOutputStream("test.pdf));
in = new BufferedInputStream(new FileOutputStream("replacement.pdf"));
while((length = in.read(buffer)) > 0 ){
out.write(buffer, 0, length);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将旧项目转换为maven项目.但是当项目是maven时,它会在导入的类上显示警告:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
Run Code Online (Sandbox Code Playgroud)
访问限制:类型'BASE64Decoder'不是API(对所需库'C:\ Program Files\Java\jre7\lib\rt.jar'的限制)
那有什么问题呢?
我的 Activity 类中有一些使用sun.misc.BASE64Encoder类的代码。但它正在显现java.lang.NoClassDefFoundError : sun.misc.BASE64Encoder。我需要吗jar?我可以从哪里下载它?
我想使用sun.misc.BASE64Encoder包的Base64编码器,因为我需要编码密码.但是,当我输入此包的导入时,会生成错误.
要使用编码器代码的消息如下:
private synchronized static String hash(final String username, final String password) {
DIGEST.reset();
return new BASE64Encoder().encode(DIGEST.digest((username.toLowerCase() + password).getBytes()));
}
Run Code Online (Sandbox Code Playgroud)
在java中是否有一个同等的类做同样的事情?或许,有人知道如何能够获得原始类的代码吗?
谢谢 :)
我一直在努力缩短路的长度。我在我的程序中表示一些整数 ID。例如
2
3
15
26
63
...
151564852
Run Code Online (Sandbox Code Playgroud)
我希望他们这样表示(仅限 0-9A-Za-z)
2
3
F
Q
z
...
vDF25a //For example
Run Code Online (Sandbox Code Playgroud)
我想到的方法是有 63 个 if 语句,其中每个从 0-63 到 0-z 的映射分别和高于 64 的任何东西对减去 63 的值进行递归。
不用说,我认为我的方法是非常有缺陷和不切实际的。什么是更合适的方法?
更新:
按照fge 的建议,我已经让编码器正常工作,但是我的解码功能仅适用于最长 2 个字符串,在字符串较大的情况下,总和变得错误。例如对于 3840 到 3845,这是输出
// Encoded
zw
x
zy
zz
100
// Decoded
3840
3841
3842
3843
124 //Invalid decoding
Run Code Online (Sandbox Code Playgroud)
这是我的解码功能代码
public static int decode(String value)
{
String revStr = new StringBuilder(value).reverse().toString();
int sum = 0;
for (int i=1; i …Run Code Online (Sandbox Code Playgroud) 我需要以这样的URL传递加密格式的数据,
http://localhost:8080/app/{encrypted_data}
那么,是否有编码器中不包含正斜杠(/)的编码器?
请注意:我不想手动从编码数据中用另一个字符替换'/'.
.................................................. .................................................. ..........
编辑:Oleg Estekhin评论使用Base64 URL安全编码工作正常,我只是在这里添加一个例子.
示例:编码:
String str = "subjects?_d=1";
byte[] bytesEncoded = Base64.encodeBase64URLSafe((str.getBytes()));
Run Code Online (Sandbox Code Playgroud)
解码:
Base64 decoder = new Base64(true);
byte[] decodedBytes = decoder.decode(new String(bytesEncoded));
System.out.println(new String(decodedBytes));
Run Code Online (Sandbox Code Playgroud)
输出:
c3ViamVjdHM_X2Q9MQ
subjects?_d=1
Run Code Online (Sandbox Code Playgroud) 我写了一个风暴拓扑.我基本上想要以字节数组的形式将avro架构中的元组发送到kafka主题.
这就是我设置螺栓的方法:
builder.setBolt(KAFKA_AVRO_BOLT_NAME, new KafkaBolt<String, byte[]>())
.fieldsGrouping(BOLT1, new Fields("key"));
Run Code Online (Sandbox Code Playgroud)
这就是我转换为字节数组的方式
Schema schema = avroObject.getSchema();
DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(schema);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
writer.write(ping, encoder);
encoder.flush();
byte[] message = out.toByteArray();
String key = new String(message, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
当我以下面的方式发出元组时,我在kafka主题中看不到任何内容(将字节流发送到kafka):
collector.emit(tuple, new Values(Obj.hashMD5(key), message));
Run Code Online (Sandbox Code Playgroud)
但相反如果我将字节数组转换为字符串,然后转换为kafka主题它的工作原理:
如下所示:
builder.setBolt(KAFKA_AVRO_BOLT_NAME, new KafkaBolt<String, String>())
.fieldsGrouping(BOLT1, new Fields("key"));
collector.emit(tuple, new Values(Obj.hashMD5(key), key));
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何使用storm kafka bolt将字节流发送到kafka主题?
java ×10
base64 ×7
android ×2
encoding ×2
string ×2
apache-kafka ×1
apache-storm ×1
api ×1
compression ×1
concurrency ×1
eclipse ×1
encoder ×1
encryption ×1
gzip ×1
hash ×1
jar ×1
networking ×1
sockets ×1
sun ×1