小编J. *_*lin的帖子

mmap()vs read()

我在C中编写了一个批量ID3标签编辑器.ID3标签通常位于mp3编码文件的开头,尽管旧的(版本1)标签在最后.该应用程序旨在从命令行接受目录和帧ID列表,然后递归目录结构,更新它找到的所有ID3标记.用户可另外选择删除所有旧(版本1)标签.另一种选择是简单地显示当前标签,而不执行更新.该目录可能包含2个文件或200万个文件.如果用户意味着更新文件,我打算将整个文件加载到内存中,执行更新,然后保存(文件也可以重命名).但是,如果用户仅表示打印当前的ID3标签,则加载整个文件似乎过多.毕竟文件可能是200mb.

我已经阅读了这个线程,这是有见地的 - mmap()与阅读块

所以我的问题是,最有效的方法是什么 - read(),mmap()或某种组合?欢迎设计理念.

TIA,

安德鲁

编辑:我的理解是mmap基本上委托将文件加载到内存中,并加载到虚拟内存子系统.在我看来,VMM将在大多数系统上进行高度优化,因为它对系统性能至关重要.

c mmap

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

Thread.CurrentThread.Join()什么时候有意义?

调用Thread.CurrentThread.Join()有什么影响,如果/什么时候调用它会有意义?

c# multithreading c#-4.0

11
推荐指数
2
解决办法
5421
查看次数

Servlet过滤器URL映射

如何将过滤器映射到URL的根目录?我正在使用Tomcat 7.0.2并将应用程序部署为ROOT.war.欢迎页面是sign_in.xhtml.每当客户端发送对站点根目录的请求(即仅域名),或者客户端请求sign_in.xhtml时,我想运行过滤器.这是我到目前为止:

  <filter>
        <filter-name>My filter</filter-name>
        <filter-class>com.myApp.myFilter</filter-class>        
    </filter>
    <filter-mapping>
        <filter-name>My filter</filter-name>
        <url-pattern>/sign_in.xhtml</url-pattern>
    </filter-mapping>
Run Code Online (Sandbox Code Playgroud)

直接请求sign_in.xhtml,成功调用过滤器,但我不知道如何获取root用户调用过滤器的请求.根据Servlet规范(3.0版)

<url-pattern>/</url-pattern>
Run Code Online (Sandbox Code Playgroud)

映射到默认servlet,空字符串映射到根.以下是规范中的相关部分:

"空字符串("")是一个特殊的URL模式,它完全映射到应用程序的上下文根,即http:// host:port //形式的请求.在这种情况下,路径信息是'/'和servlet路径和上下文路径是空字符串("")."

但是,以下两个url模式都会导致Tomcat抛出异常.

<url-pattern></url-pattern>
<url-pattern>""</url-pattern>
Run Code Online (Sandbox Code Playgroud)

如果有人能够对此有所了解,我将非常感激.谢谢.

安德鲁

java servlets url-pattern servlet-filters

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

就地矩阵旋转

我发现一个有趣的问题,要求将NxN矩阵旋转90度.我在C中的递归解决方案如下.但是当我查找其他解决方案时,大多数都使用嵌套for循环来完成任务(这似乎工作正常).嵌套循环实现似乎及时运行O(n^2).

请参阅: 如何旋转二维数组?

我相信递归解决方案也会运行O( (n^2-n)/2 ),也是O(n^2)如此.我的问题是双重的.1)我的复杂性分析是否适用于递归和非递归解决方案,以及2)是否有一些高效或巧妙的方法来旋转我没有找到的矩阵?

TIA.

#include <stdio.h>
#include <stdlib.h>


int SIZE = 0;


/**
 * In-place, recursive, clockwise, 90 degree matrix rotation.
 */
static void rotate_in_place( int matrix[][SIZE], int n )
{
    if( n < 2 )
        return;


    int temp1, temp2;

    for( int i = 0; i < (n-1); i++ )
    {
        temp1 = matrix[i][n-1];
        matrix[i][n-1] = matrix[0][i];

        temp2 = matrix[n-1][n-i-1];
        matrix[n-1][n-i-1] = temp1;

        temp1 = matrix[n-i-1][0];
        matrix[n-i-1][0] = temp2; …
Run Code Online (Sandbox Code Playgroud)

c matrix

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

DT_REG未声明(首次在此函数中使用)和-std = c99

我正在使用Eclipse CDT编写C程序.我想像这样初始化我的for循环......

for( int i = 0; i < 5; i++ )
Run Code Online (Sandbox Code Playgroud)

所以我将-std = c99添加到gcc命令行.这具有抛出错误的副作用:'DT_REG'未声明(在此函数中首次使用)为该行:

if( dir_ent->d_type != DT_REG )
Run Code Online (Sandbox Code Playgroud)

DT_REG在dirent.h中定义(包括在内).代码在gcc命令行上编译时没有-std = c99.我错过了什么?

c

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

在Java中运行时确定泛型类型参数

class Json<T>
{
  @SerializedName( "T's type here" ) 
  private final ArrayList<T> _bucket = new ArrayList<T>( 5 );
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何(如果可能的话)可以在运行时确定类的泛型参数.从我读过的内容可以看出泛型类的子类,但是我无法找到如何使用类型本身.这些链接有一些很好的信息,但我不确定这是我在寻找什么.

http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-java www.artima.com/weblogs/viewpost.jsp?thread=208860

我最终要完成的是让Gson序列化上面的'_bucket'变量,作为类型'T'的类名.

如果有人能指出我正确的方向,我会很感激.

java generics gson

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