java go 速度_Go_VS_Java_文件按行读写速度

1:运行环境说明:

go:1.0.3 64位

jdk:1.7_u9 64位

操作系统:win7 64位,Thinkpad T410i,i3 M350,2.27GHz,双核4线程,8G内存

文本文件:UTF-8纯文本文件,以行为单位,文件大小2.6G

程序目标:以行为单位读取该文件,并将读取的行写入另一个新的文件内。

2:程序结果

java  totalTime:96096毫秒  client模式

java  totalTime:77595毫秒  server模式

go     totalTime:75328毫秒

以上结果仅供参考...

3:测试代码

java代码package function.filehelper;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

public class SingleFileMergeFilter3 {

public String inFile = "D:/00/tk.txt";

public String inEncode = "UTF-8";

public String outFile = "D:/00/tk3.txt";

public String outEncode = "UTF-8";

private FileInputStream fis;

private InputStreamReader isr;

private BufferedReader bfr;

private FileOutputStream fos;

private OutputStreamWriter osw;

private BufferedWriter bwo;

public void dealByLine() throws Exception{

this.fis = new FileInputStream(inFile);

this.isr = new InputStreamReader(this.fis, inEncode);

this.bfr = new BufferedReader(this.isr);

this.fos = new FileOutputStream(outFile);

this.osw = new OutputStreamWriter(this.fos, outEncode);

this.bwo = new BufferedWriter(this.osw);

long s = System.currentTimeMillis();

String line = null;

while((line = this.bfr.readLine()) != null){

this.bwo.write(line + "\r\n");

}

this.bwo.flush();

long e = System.currentTimeMillis();

System.out.println("totalTime:" + (e - s));

this.bfr.close();

this.bwo.close();

}

public static void main(String[] args) throws Exception {

new SingleFileMergeFilter3().dealByLine();

}

}

Go代码

package main

import (

"bufio"

"fmt"

"io"

"os"

"time"

)

func main() {

var inFile = "D:/00/tk.txt"

var outFile = "D:/00/tk2.txt"

fi, _ := os.Open(inFile)

defer fi.Close()

fo, _ := os.Create(outFile)

defer fo.Close()

r := bufio.NewReader(fi)

w := bufio.NewWriter(fo)

var s = time.Now()

var line string

for {

lineByte, _, er3 := r.ReadLine()

if er3 != nil && er3 == io.EOF {

break

}

line = string(lineByte)

w.WriteString(line + "\r\n")

}

w.Flush()

var e = time.Now()

fmt.Println("totalTime:", e.Sub(s).Nanoseconds()/1000/1000)

}

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,您的问题似乎有些不明确。您是想了解如何在 Java 或 Go 中使用国密 SM2 算法进行签名和验签,或是想了解如何进行 P7 格式的签名和验签吗?以下是两个问题的回答: 1. 如何在 Java 或 Go 中使用国密 SM2 算法进行签名和验签? 在 Java 中使用国密 SM2 算法进行签名和验签,您可以使用 BouncyCastle 库。具体实现可以参考下面的代码: Java: ```java // 加载 BouncyCastle Provider Security.addProvider(new BouncyCastleProvider()); // 生成密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("sm2p256v1"); keyPairGenerator.initialize(ecGenParameterSpec, new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 获取私钥和公钥 PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); // 签名 Signature signature = Signature.getInstance("SM3withSM2", "BC"); signature.initSign(privateKey); signature.update(data); byte[] signatureBytes = signature.sign(); // 验签 signature.initVerify(publicKey); signature.update(data); boolean verifyResult = signature.verify(signatureBytes); ``` Go: ```go // 生成密钥对 privateKey, err := sm2.GenerateKey() if err != nil { log.Fatal(err) } publicKey := &privateKey.PublicKey // 签名 hash := sm3.SumSM3(data) signature, err := privateKey.Sign(rand.Reader, hash[:], nil) if err != nil { log.Fatal(err) } // 验签 verifyResult := publicKey.Verify(hash[:], signature) ``` 2. 如何进行 P7 格式的签名和验签? 在 Java 中进行 P7 格式的签名和验签,您可以使用 BouncyCastle 库。具体实现可以参考下面的代码: Java: ```java // 加载 BouncyCastle Provider Security.addProvider(new BouncyCastleProvider()); // 读取证书和私钥 KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(new FileInputStream("keystore.p12"), "password".toCharArray()); PrivateKey privateKey = (PrivateKey) keyStore.getKey("alias", "password".toCharArray()); Certificate[] certChain = keyStore.getCertificateChain("alias"); X509Certificate cert = (X509Certificate) certChain[0]; // 加载证书链 JcaCertStore jcaCertStore = new JcaCertStore(Arrays.asList(certChain)); // 签名 ContentSigner signer = new JcaContentSignerBuilder("SM3withSM2").setProvider("BC").build(privateKey); CMSTypedData cmsData = new CMSProcessableByteArray(data); CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); generator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build()).build(signer, cert)); generator.addCertificates(jcaCertStore); CMSSignedData signedData = generator.generate(cmsData, true); byte[] signedBytes = signedData.getEncoded(); // 验签 CMSSignedData cms = new CMSSignedData(signedBytes); SignerInformationStore signers = cms.getSignerInfos(); Collection<SignerInformation> c = signers.getSigners(); Iterator<SignerInformation> it = c.iterator(); if (it.hasNext()) { SignerInformation signer = it.next(); X509CertificateHolder certHolder = (X509CertificateHolder) cms.getCertificates().getMatches(signer.getSID()).iterator().next(); if (signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(certHolder))) { return true; } } return false; ``` Go: ```go // 读取证书和私钥 pemData, err := ioutil.ReadFile("keystore.pem") if err != nil { log.Fatal(err) } blocks := pem.Decode(pemData) key, err := x509.ParsePKCS8PrivateKey(blocks.Bytes) if err != nil { log.Fatal(err) } certData, err := ioutil.ReadFile("cert.pem") if err != nil { log.Fatal(err) } cert, err := x509.ParseCertificate(certData) if err != nil { log.Fatal(err) } // 加载证书链 certs := []*x509.Certificate{cert} intermediateData, err := ioutil.ReadFile("intermediate.pem") if err == nil { for { blocks := pem.Decode(intermediateData) if blocks == nil { break } intermediateCert, err := x509.ParseCertificate(blocks.Bytes) if err != nil { log.Fatal(err) } certs = append(certs, intermediateCert) } } // 签名 hash := sm3.SumSM3(data) signedData, err := cms.NewSignedData(hash[:], key, cert, certs...) if err != nil { log.Fatal(err) } signedBytes, err := signedData.ToDER() if err != nil { log.Fatal(err) } // 验签 cms, err := cms.ParseCMS(signedBytes) if err != nil { log.Fatal(err) } signerInfos := cms.GetSignerInfos() for _, signerInfo := range signerInfos { err = signerInfo.Verify(cert) if err == nil { return true } } return false ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值