小编jah*_*ezz的帖子

正则表达式中的双正斜杠期

我最近开始在Java中使用正则表达式,我遇到了一个奇怪的表达式.

问题要求找到仅包含字母和最多一个结束时期的"单词".例如,如果我输入字符串:

one two. wr7ng not1 three. nope..
Run Code Online (Sandbox Code Playgroud)

引擎会找到一个,两个和三个作为匹配的单词.该问题的给定解决方案是此模式:

for (String tok : s.split(" ")) {
  if (tok.matches("[a-zA-Z]+//.?")) {
    // code done to record successful match
  }
}
Run Code Online (Sandbox Code Playgroud)

这两个正斜杠是什么意思?我将这个表达式与这个表达式进

[a-zA-Z]+.?
Run Code Online (Sandbox Code Playgroud)

并且发现只有后者错误地接受了最后一个槽(周期)中的数字.这是唯一的区别吗?

java regex

3
推荐指数
1
解决办法
1万
查看次数

HttpClient请求成功,定义了超时,但没有挂起

我找到了一种修复我的代码的奇怪的黑客方式,我想知道是否有人可以解释它为什么有效.我正在编写与REST API通信的代码,以将视频文件上传到多个HTTP请求中.

我的一个视频部分请求连接有问题,但从未响应.该程序分五个部分上传视频,但它总是挂在五个部分的第三部分.我决定添加一个请求硬超时来强制程序跳过那个悬挂部分.好吧,加入那个计时器后神奇地说,没有更多的挂断!

任何想法为什么会这样?请求实际上并没有超时,但添加此代码可以保持程序的正常运行.

private void uploadParts(String assetId) throws IOException {
    //set up post request
    HttpClient client = HttpClientBuilder.create().build();

    String url = "";

    //prepare video
    File video = new File("files/video.mp4");
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(video));

    int partMaxSize = 1024 * 1024 * 5;
    byte[] buffer = new byte[partMaxSize];
    double fileSize = video.length();
    System.out.println(fileSize);
    System.out.println(fileSize / partMaxSize);
    int parts = (int) Math.ceil(fileSize / partMaxSize);
    System.out.println(parts);

    for(int i = 1; i < parts+1; i++)    {
        String partNumber = i + ""; …
Run Code Online (Sandbox Code Playgroud)

java rest timeout apache-httpclient-4.x

2
推荐指数
1
解决办法
1746
查看次数

在异步任务中关闭MemoryStream

我正在编写代码,一次加载同一任务的多个实例,并等待它们全部完成.每个任务从文件读取并上传该文件的一部分的字节数组.

var requests = new Task[parts.Count];
foreach (var part in parts)
{
    var partNumber = part.Item1;
    var partSize = part.Item2;
    var ms = new MemoryStream(partSize);
    var bw = new BinaryWriter(ms);

    var offset = (partNumber - 1) * partMaxSize;
    var count = partSize;
    bw.Write(assetContentBytes, offset, count);

    ms.Position = 0;
    Console.WriteLine("beginning upload of part " + partNumber);
    requests[partNumber - 1] = uploadClient.UploadPart(uploadResult.AssetId, partNumber, ms);
}

await Task.WhenAll(requests);
Run Code Online (Sandbox Code Playgroud)

我想在相关任务完成后关闭这些MemoryStream,但如果我将stream.Close()写入循环,则在任务完成之前关闭流.任务完成后是否可以关闭每个流?谢谢.

c# task async-await

1
推荐指数
1
解决办法
607
查看次数

标签 统计

java ×2

apache-httpclient-4.x ×1

async-await ×1

c# ×1

regex ×1

rest ×1

task ×1

timeout ×1