关于SO的Java文本差异库有几个问题,但没有关于二元差异的问题.所以我走了:
我正在寻找一个用Java实现的二进制差异库.我找到了javaxdelta和GNU Diff端口,但我想知道是否还有其他一些隐藏的宝石?也许有人有上述图书馆的经验?比较会非常有用.
最后,也许有必要知道我想要使用Avro序列化对象.
由于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语句)吗?
我需要一个字节生成器,它将生成从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) 我想使用HTML <img>标记在网页上显示图像.
我已将图像存储在本地驱动器上.
怎么做到这一点?
代码:
<img src="D:\Images\TechnipLogo.jpg">
Run Code Online (Sandbox Code Playgroud)
图像未显示.
让我们假设我有一个相当大的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组合没有完整的下载包可用.
我正在尝试编码和解码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) 场景:
ClassPathXmlApplicationContextmain(),这将启动Jetty webapp.XmlWebApplicationContextWEB-INF/applicaitonContext.xml加载为根上下文我只是想绕过上下文.
WEB-INF/applicationContext吗?我还不是很清楚这些背景如何相互关联,我只需要快速了解它.
我正在使用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)
这种方法是否正确?任何建议都受到欢迎.:)
我想将文件(.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比十六进制字符串少.
我想知道,还有其他任何好主意吗?
非常感谢!:)
我编写了一个实用程序类来编码带有基数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)