我正在尝试使用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) 我正在尝试将我的应用与扩展相关联.我已阅读文档和一些 问题有关的问题.但主要的文件浏览器(如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) 我们在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和其他设备中不起作用.
我试图将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的用户。
怎么了?我该如何解决?
我正在使用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) 我正在尝试开发一个应用程序,你会说出一个名字,它会查找你的联系人并返回所有名字,如"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) 我有一个接收任务并将它们放入通道的函数。每个任务都有 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 + …