小编Nee*_*aks的帖子

用于Java的二进制差异库

关于SO的Java文本差异库有几个问题,但没有关于二元差异的问题.所以我走了:

我正在寻找一个用Java实现二进制差异库.我找到了javaxdeltaGNU Diff端口,但我想知道是否还有其他一些隐藏的宝石?也许有人有上述图书馆的经验?比较会非常有用.

最后,也许有必要知道我想要使用Avro序列化对象.

java diff binary-diff

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

MemoryStream必须明确处理?

由于MemoryStream是一个非托管资源,它总是必须处理?

鉴于:

1) A method is invoked.
2) A MemoryStream object is created (MemoryStream ms = new MemoryStream();).
3) An exception occurs and is caught from the invoking classes.
Run Code Online (Sandbox Code Playgroud)

因此,MemoryStream对象上的引用将丢失.这种情况需要try/finally-block(或using语句)吗?

.net dispose memorystream

6
推荐指数
2
解决办法
2473
查看次数

这个线程安全的字节序列生成器有什么问题?

我需要一个字节生成器,它将生成从Byte.MIN_VALUE到Byte.MAX_VALUE的值.当它达到MAX_VALUE时,它应该从MIN_VALUE重新开始.

我使用AtomicInteger编写了代码(见下文); 但是,如果同时访问并且如果使用Thread.sleep()人为地减慢了代码,那么代码似乎没有正常运行(如果没有睡眠,它运行正常;但是,我怀疑它对于出现并发问题来说太快了).

代码(添加了一些调试代码):

public class ByteGenerator {

    private static final int INITIAL_VALUE = Byte.MIN_VALUE-1;

    private AtomicInteger counter = new AtomicInteger(INITIAL_VALUE);
    private AtomicInteger resetCounter = new AtomicInteger(0);

    private boolean isSlow = false;
    private long startTime;

    public byte nextValue() {
        int next = counter.incrementAndGet();
        //if (isSlow) slowDown(5);
        if (next > Byte.MAX_VALUE) {
            synchronized(counter) {
                int i = counter.get();
                //if value is still larger than max byte value, we reset it
                if (i > Byte.MAX_VALUE) {
                    counter.set(INITIAL_VALUE);
                    resetCounter.incrementAndGet();
                    if (isSlow) slowDownAndLog(10, "resetting"); …
Run Code Online (Sandbox Code Playgroud)

java puzzle concurrency atomic

6
推荐指数
2
解决办法
1101
查看次数

如何从系统驱动器中将src提供给html中的<img>标签?

我想使用HTML <img>标记在网页上显示图像.

我已将图像存储在本地驱动器上.

怎么做到这一点?

代码:

<img src="D:\Images\TechnipLogo.jpg">
Run Code Online (Sandbox Code Playgroud)

图像未显示.

html image

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

推荐升级STS的方法?

让我们假设我有一个相当大的Spring Tool Suite(STS)用户组织.这些用户正在使用一些过时的STS版本(例如3.1.0).

将这些用户升级到最新的STS + Eclipse的建议和最痛苦的方法是什么?

我基本上看到两种主要方法.

使用Eclipse内置的P2更新机制从Eclipse/STS中更新STS + Eclipse.这是官方支持的方式吗?假设我坚持STS的"正式发布"STS + Eclipse版本组合(例如STS 3.1.0 + Eclipse 3.8.0,STS 3.1.0 + Eclipse 4.2.0,STS 3.2.0 + Eclipse 3.8.2,STS 3.2.0 + Eclipse 4.2.2等).

这样可以保留所有已安装的插件和设置.

安装新的STS副本并从旧的STS安装导入设置.用户需要重新安装插件.

我更喜欢第一种选择,但在投入大量时间使这个过程尽可能无缝地与用户合作之前,我想确认这是"官方支持".

而且,STS对底层Eclipse版本的依赖程度如何?例如,我在Eclipse 3.8.0之上安装了STS 3.1.0 - 我可以假设将底层Eclipse版本升级到3.8.1或3.8.2不会导致任何兼容性问题吗?或者我应该坚持STS下载页面上列出的组合(意味着我也应该将STS升级到3.2.0)?

UPDATE

我查看了不同Eclipse版本的STS更新站点,以查看每个版本可用的STS版本(当前最新的STS版本是3.6.4).我发现:

(我搜索了"org.springsource.sts.ide"IU/plugin/bundle ID)

这似乎意味着通过使用正确的更新站点,即使底层Eclipse平台版本很老,也应该可以将STS升级到最新版本 - 导致Eclipse + STS组合没有完整的下载包可用.

spring-tool-suite

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

使用java的Unicode base 64编码

我正在尝试编码和解码UTF8字符串到base64.理论上不是问题,但解码时似乎永远不会输出正确的字符而是?


        String original = "?????????";
        B64encoder benco = new B64encoder();
        String enc = benco.encode(original);
        try
        {
            String dec = new String(benco.decode(enc.toCharArray()), "UTF-8");
            PrintStream out = new PrintStream(System.out, true, "UTF-8");
            out.println("Original: " + original);
            prtHx("ara", original.getBytes());
            out.println("Encoded: " + enc);
            prtHx("enc", enc.getBytes());
            out.println("Decoded: " + dec);
            prtHx("dec", dec.getBytes());
        } catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

控制台的输出如下:

原文:خهعسيبنتا
ara = 3F,3F,3F,3F,3F,3F,3F,3F,3F
编码:Pz8/Pz8/Pz8/
enc = 50,7A,38,2F,50,7A,38,2F ,50, 7A,38,2F
解码:?????????
dec = 3F,3F,3F,3F,3F,3F,3F,3F,3F

prtHx只是将字节的十六进制值写入输出.我在做一些明显不对的事吗?


Andreas通过强调getBytes()方法使用平台默认编码(Cp1252)来指出正确的解决方案,即使源文件本身是UTF-8.通过使用getBytes("UTF-8"),我能够注意到编码和解码的字节实际上是不同的.进一步调查表明,编码方法使用了getBytes().改变这个很好地解决了这个问题.


try
        {
            String enc = benco.encode(original);
            String dec = …
Run Code Online (Sandbox Code Playgroud)

java unicode base64 utf-8

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

Spring:如何组织应用程序+ Web上下文?

场景:

  1. 启动应用程序并加载ClassPathXmlApplicationContextmain(),这将启动Jetty webapp.
  2. 然后调度程序servlet加载一个 XmlWebApplicationContext
  3. 然后,dispatcher servlet寻找WEB-INF/applicaitonContext.xml加载为根上下文

我只是想绕过上下文.

  • 我应该使用上面列出的3个上下文吗?
  • 我应该使用第一个上下文作为根上下文而不允许调度程序加载默认值WEB-INF/applicationContext吗?
  • 我应该在第1和第3个上下文之间创建父/子关系吗?(这是由调度程序servlet在#2和#3上下文之间完成的)

我还不是很清楚这些背景如何相互关联,我只需要快速了解它.

java spring spring-mvc

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

Spring MVC 3.0基本身份验证实现

我正在使用ASP.NET中的Spring MVC框架将我的Web应用程序转换为Java(虽然可以学习它的好方法 - :))我需要在我的应用程序中实现身份验证:请告诉我,如果我的方法是好的和专业的,如果不是,最好的做法是什么:

首先,我正在写User class,其中包含有关当前用户firstname/lastname/email/id/etc的所有信息....

class User implements Serializable{
private String firstName;
private String lastName;
private Long id;
private String email;

///Settters and Getters

}
Run Code Online (Sandbox Code Playgroud)

我正在实现名为DlSession的类并在sesison级别上实现它.

<bean id="MySession" class="DlSession" scope="session">
<aop:scoped-proxy/>

class DlSession implements Serializable{
private User currentUser;

public DlSession(){}

// getters and setters:
}
Run Code Online (Sandbox Code Playgroud)

当用户提交他的用户/通行证时,我正在验证凭证,以及用户是否存在将所有用户数据检索到User类的实例.然后我将Session中的currentUser设置为我检索到的用户:

mySesison.setCurrentUser(user);
Run Code Online (Sandbox Code Playgroud)

为了验证身份验证,我需要检查:

if (mySession.getcurrentUser() == null)
//return unauthenticated 
else 
//return authenticated
Run Code Online (Sandbox Code Playgroud)

要从系统注销用户,我只是这样做:

mySession.setcurrentUser(null);
Run Code Online (Sandbox Code Playgroud)

这种方法是否正确?任何建议都受到欢迎.:)

java authentication spring-mvc spring-security java-ee

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

将二进制数据转换为字符数据的最佳方法是什么?

我想将文件(.jpg图像文件)转换为txt文件(ASCII码)

现在,我有两个计划,将文件字节转换为Hex,并转换为Base64

  File file=new File("D:/temp/1.jpg");
  byte[] bytes=getBytesFromFile(file);
  System.out.println("bytes:"+bytes.length);//bytes:9006
  String hex=HexUtil.asHex(bytes);
  String base64=Base64.encode(bytes);
  System.out.println("hex:"+hex.length());//hex:18012
  System.out.println("base64:"+base64.length());//base64:12165
Run Code Online (Sandbox Code Playgroud)

我认为Base64更好,因为发送12165比十六进制字符串少.

我想知道,还有其他任何好主意吗?

非常感谢!:)

java binary base64 encoding hex

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

处理大量"long"时,这段代码有什么问题?

我编写了一个实用程序类来编码带有基数N 的自定义数字系统中的数字.作为任何自尊的Java程序员,我然后编写了一个单元测试来检查代码是否按预期工作(对于我可以抛出的任何数字).

事实证明,对于小数字,它起作用了.但是,对于足够大的数字,测试失败了.

代码:

public class EncodeUtil {

    private String symbols;

    private boolean isCaseSensitive;
    private boolean useDefaultSymbols;

    private int[] symbolLookup = new int[255];

    public EncodeUtil() {
        this(true);
    }

    public EncodeUtil(boolean isCaseSensitive) {
        this.useDefaultSymbols = true;
        setCaseSensitive(isCaseSensitive);
    }

    public EncodeUtil(boolean isCaseSensitive, String symbols) {
        this.useDefaultSymbols = false;
        setCaseSensitive(isCaseSensitive);
        setSymbols(symbols);
    }

    public void setSymbols(String symbols) {
        this.symbols = symbols;
        fillLookupArray();
    }

    public void setCaseSensitive(boolean isCaseSensitive) {
        this.isCaseSensitive = isCaseSensitive;
        if (useDefaultSymbols) {
            setSymbols(makeAlphaNumericString(isCaseSensitive));
        }
    }

    private void fillLookupArray() …
Run Code Online (Sandbox Code Playgroud)

java puzzle math

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