小编Gre*_*bin的帖子

压缩zip存档

我正在尝试使用java将目录内容压缩为zip存档.一切都很好,但我只想澄清一些事实.这是我用来压缩文件的代码:

public void pack(@Nonnull String archiveName, @Nonnull File outputDir, @Nonnull File targetDir) {
  File zipFile = new File(outputDir, "out.zip");

  ZipOutputStream zipOutputStream = null;
  OutputStream outputStream;
  try {
    // create stream for writing zip archive
    outputStream = new FileOutputStream(zipFile);
    zipOutputStream = new ZipOutputStream(outputStream);
    // write files recursively
    writeFiles(zipOutputStream, targetDir.listFiles(), "");
  } catch (IOException e) {
    LOGGER.error("IO exception while packing files to archive", e);
  } finally {
    // close output streams
    if (zipOutputStream != null) {
      try {
        zipOutputStream.close();
      } catch (IOException …
Run Code Online (Sandbox Code Playgroud)

java zip deflate

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

常用文件资源管理器的Intent过滤器

我正在尝试将我的应用与扩展相关联.我已阅读文档一些 问题有关的问题.但主要的文件浏览器(如es文件浏览器,astro,Rhythm软件的文件管理器)无法打开我的文件.

我的manifest档案:

<activity android:name="com.comapping.android.map.MapActivity" android:configChanges="orientation|keyboardHidden">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="file" android:host="*" android:pathPattern=".*\\.comap" android:mimeType="*/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="content" android:host="*" android:pathPattern=".*\\.comap" android:mimeType="*/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用下一个代码从我的应用程序打开文件一切正常(选择器未显示):

String extension = "";
int dotIndex = downloadedFile.lastIndexOf('.');
if (dotIndex != -1) {
    extension = downloadedFile.substring(dotIndex + 1, downloadedFile.length());
} …
Run Code Online (Sandbox Code Playgroud)

android intentfilter

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

Safari中url中的特殊字符

我们在Web应用程序中使用了一些特殊字符,如下所示:example.com/foo#???.

我们解析哈希使用decodeURI(window.location.hash)(有时哈希包含未编码的特殊字符)并设置新值window.location.hash = "???".

一切都在Chrome,Firefox,Opera和IE浏览器甚至工作正常,但在Safari中,我们得到20?代替???.

如果在Safari中设置hash就像window.location.hash = encodeURI("???");它有效,但当然它在Chrome,FF和其他设备中不起作用.

safari uri special-characters

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

限制在Docker容器内启动的进程数

我试图将docker容器内的叉炸弹造成的损害降至最低。

我正在使用pam_limits/etc/security/limits.conf文件是

1000:1128 hard nproc 40
1000:1128 soft nproc 40
Run Code Online (Sandbox Code Playgroud)

这意味着id在[1000..1128]范围内的任何用户最多可以有40个进程。如果我由具有此类ID的用户在shell中运行forkbomb,则此方法效果很好。

但是当我在docker容器中运行fork炸弹时,这些限制没有被应用,所以当我运行命令时

# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"
Run Code Online (Sandbox Code Playgroud)

我有尽可能多的进程,所有这些进程都属于id = 1000的用户。

怎么了?我该如何解决?

pam docker

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

Spring Security + MVC annotations非法参数异常

我正在使用spring MVC和spring security.

我有注释驱动的控制器,并尝试添加安全注释.

控制器代码:

@Controller
public class SomeController implements MessageSourceAware {

    @Secured("ROLE_ADMIN")
    @RequestMapping(value = "/somepage", method = RequestMethod.GET)
    public String getPage(HttpServletRequest request, ModelMap model) {
        // logic
        return ADMIN_VIEW_NAME;
    }
Run Code Online (Sandbox Code Playgroud)

我的spring-security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <security:global-method-security secured-annotations="enabled" />

    <security:http auto-config="true" use-expressions="true" access-denied-page="/denied">

        <security:intercept-url pattern="/login" access="permitAll"/>
        <!--<security:intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')"/>-->

        <security:form-login
                login-page="/login"
                authentication-failure-url="/login?error=true"
                default-target-url="/index"/>

        <security:logout
                invalidate-session="true"
                logout-success-url="/login"
                logout-url="/logout"/>

    </security:http>

    <!-- Declare an authentication-manager to use a custom userDetailsService -->
    <security:authentication-manager>
        <security:authentication-provider …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security spring-annotations

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

AlertDialog.Builder不会将ArrayList <String>显示为列表

我正在尝试开发一个应用程序,你会说出一个名字,它会查找你的联系人并返回所有名字,如"Lars A.,Lars B.,Lars C.".我将所有这些名称保存在ArrayList中并且它可以正常工作.现在我想要一个AlertDialog,因此用户可以从此列表中选择正确的联系人.我想出来,它必须是一个CharSequence,所以我之前转换它.但我认为列表是空的,因为我只看到警报消息.

这个网站描述得很好,但使用静态值,我需要动态值:Android Developer Site.

继承我的代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
 CharSequence[] cs = namearray.toArray(new CharSequence[namearray.size()]);
 builder.setMessage("Welche/n " + cname + " meinst du?");
 builder.setItems(cs, new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog,
 int item) {
 //do something
 }   });
 AlertDialog alert = builder.create();
 alert.show();
Run Code Online (Sandbox Code Playgroud)

java android android-alertdialog

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

合并频道中的项目

我有一个接收任务并将它们放入通道的函数。每个任务都有 ID、一些属性和一个放置结果的通道。看起来像这样

task.Result = make(chan *TaskResult)
queue <- task
result := <-task.Result
sendReponse(result)
Run Code Online (Sandbox Code Playgroud)

另一个 goroutine 从通道中获取一个任务,对其进行处理并将结果放入任务的通道中

task := <-queue
task.Result <- doExpensiveComputation(task)
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常。但现在我想在queue. 任务处理是一个非常昂贵的操作,所以我想一次处理队列中具有相同 ID 的所有任务。我看到了两种方法。

第一个是不要将具有相同 ID 的任务放入队列,因此当现有任务到达时,它将等待它的副本完成。这是伪代码

if newTask in queue {
  existing := queue.getById(newTask.ID)
  existing.waitForComplete()
  sendResponse(existing.ProcessingResult)
} else {
  queue.enqueue(newTask)
}
Run Code Online (Sandbox Code Playgroud)

因此,我可以使用 go channel 和 map 进行随机访问 + 一些同步方式(如互斥锁)来实现它。我不喜欢这种方式的一点是我必须在代码中同时携带地图和频道,并保持它们的内容同步。

第二种方式是将所有任务放入队列,但是当结果到达时从队列中提取任务和所有具有相同ID的任务,然后将结果发送给所有任务。这是伪代码

someTask := queue.dequeue()
result := doExpensiveComputation(someTask)
someTask.Result <- result
moreTasks := queue.getAllWithID(someTask.ID)
for _,theSameTask := range moreTasks {
  theSameTask.Result <- result
}
Run Code Online (Sandbox Code Playgroud)

我知道如何以与上述相同的方式使用 chan + …

queue multithreading go

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