请教关于通过url操作文件流的问题:)

时间:2021-10-31 09:31:50
摘要:我准备根据url获取一个x509证书文件,并对其进行操作。现在我 生成了一个X509Certificate实体并得到证书主体名;但是如果我直接将证书作为流打印,则失败。
具体如下:
//1----建立连接
URL url = new URL("https://a.com/download.cer?cmd=b;type=c;key=4");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
//2----得到输入流
DataInputStream dis = new DataInputStream(connection.getInputStream());
//3-----生成证书实体可以得到主体名
Certificate cert = cf.generateCertificate(dis);
X509Certificate t = (X509Certificate) cert;
System.out.println("主体名:" + t.getSubjectDN());
//4------得到证书文件流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int count;
byte[] buffer = new byte[1024];
//根本进入不了循环,难道和3冲突?
while ((count = dis.read(buffer)) != -1) {
System.out.println("is coming in?");
baos.write(buffer, 0, count);
}

后来发现,注释掉3就不会冲突,但是如果向ByteArrayOutputStream 实例写完字节流 调用toByteArray()打印得到的字节数组,是一堆数字,我想得到如
-----BEGIN CERTIFICATE-----
98G2jBdkRR6jTBuV3FnVPcpwrddkGyrDY7lJMLFCIERcpuUvGfW12xKURYMLzHzy
zD/xDfg25KqJG82UKG+UgRpOfWhY5nLDb1uzzaXsBNN/CCMzDZ3f+CpTOyFMDnB6
kU7mwOD/6nwVS3Cf6OZi8r+Hm46WnNT6oGDEXbIaQCrGUGz87bJiuCWhrgDkYXqv
2RF0QMQkvebaHjDz17uacg==
-----END CERTIFICATE-----
的结果,应该怎么处理

请高手指教,谢谢啦















6 个解决方案

#1


关注

#2


关注并学习中

#3


能不能反代码给的再全一些?

#4


没向证书写过流,帮不到你了咯~

#5


简单啦,数据已经取得了,你把ByteArrayOutputStream baos 中的baos转换成String就行了.
String str = new String(baos.toByteArray());
System.out.println(str);

#6


Certificate cert = cf.generateCertificate(dis);
===
这一句已经把数据读完了,输入流指针已经移到末尾,4当然读不到数据了

#1


关注

#2


关注并学习中

#3


能不能反代码给的再全一些?

#4


没向证书写过流,帮不到你了咯~

#5


简单啦,数据已经取得了,你把ByteArrayOutputStream baos 中的baos转换成String就行了.
String str = new String(baos.toByteArray());
System.out.println(str);

#6


Certificate cert = cf.generateCertificate(dis);
===
这一句已经把数据读完了,输入流指针已经移到末尾,4当然读不到数据了