Java代码优化和安全

一拳超人
class Testing{
    private static int counter;
    private static int[] intArray;
    public static ReturnClassName className(File f){
        ReturnClassName returnCN= new ReturnClassName();
        byte[] b;
        try{
            DataInputStream dataIStream= new DataInputStream(new FileInputStream(f));
            intArray= new int[dataIStream.available()];
            b= new byte[dataIStream.available()];
            dataIStream.read(b);
            intArray= b;
            // setting methods for ReturnClassName 
            // counter increment
            returnCN.setNumber(someMethod(5));
            }//catch() block

    return returnCN;
}
private static int[] someMethod(int l){
    return Arrays.copyOfRange(intArray, counter, counter + l);
}

或者

class Testing{
    private static int counter;
    public static ReturnClassName className(File f){
        ReturnClassName returnCN= new ReturnClassName();
        byte[] b;
        try{
            DataInputStream dataIStream= new DataInputStream(new FileInputStream(f));
            intArray= new int[dataIStream.available()];
            b= new byte[dataIStream.available()];
            dataIStream.read(b);
            intArray= b;
            // setting methods for ReturnClassName 
            // counter increment
            returnCN.setNumber(someMethod(intArray,5));

    }//catch() block

    return returnCN;
}

private static int[] someMethod(int[] iArray, int l){

    return Arrays.copyOfRange(iArray, counter, counter + l);
}

我想知道以上两个代码中哪个更优化,更安全。同样,在第二个代码中传递数组时,它传递的是整个数组还是仅传递该数组的地址。就像intArray和iArray都指向同一个整数数组一样?

巴勃罗·弗朗西斯科·佩雷斯·伊达尔戈

数组通过引用传递,因此两个片段在效率上都是等效的,除了以下事实之外:如果您不将其 intArray用于其他目的:第二个版本将取消引用该数组,并使其成为垃圾回收的候选对象。

这是在第二种情况下,数组将是someMethod执行返回后立即要收集的候选对象,而第一种版本则将保持引用数组直到程序结束,因为它是静态的。

根据您的评论,我知道您将为className每个文件调用一次不同的文件,并且对于每个文件,您将多次调用“ someMethod”。然后,我喜欢在某些方面与第一个类似但与第一个和第二个不同的解决方案。

该解决方案是为Testing您从中加载数据的每个文件提供一个实例

  1. 强制每个实例与一个具体文件相关联。
  2. 使方法和属性不是静态的。这是为了使每个Testing元素都可以从其文件中加载自己的数据。
  3. 进行更改,className以便它将仅从其文件中加载数据一次。
  4. Testing及其实例指定合适的用户

    class Testing{
    
        public Testing(File f)
        {
            this.f = f;
        }
    
        private File f;
        private int[] intArray;
        public static ReturnClassName className(){
            ReturnClassName returnCN= new ReturnClassName();
            byte[] b;
            if(intArray == null || intArray.length > 0) return //If it was called before, then we don't load the file again.
            {
                try{
                    DataInputStream dataIStream= new DataInputStream(new FileInputStream(f));
                    intArray= new int[dataIStream.available()];
                    b = new byte[dataIStream.available()];
                    dataIStream.read(b);
                    intArray= b;
                    // setting methods for ReturnClassName 
                    // counter increment
                } catch(Exception e) { 
                ...
                ...
                }
            }
            returnCN.setNumber(someMethod(5));
            return returnCN;
        }
    
        private int[] someMethod(int l){
            return Arrays.copyOfRange(intArray, counter, counter + l);
        }
    }
    

使用示例:

Testing forFile1 = new Testing(fileObj01);
ReturnClassName x = ReforFile1.className();
ReturnClassName y = ReforFile1.className();

Testing forFile2 = new Testing(fileObj02);
ReturnClassName z = ReforFile2.className();
ReturnClassName w = ReforFile2.className();

另一方面,如果您有一个由输入文件(例如缓存)索引的整数数组的映射,并且保留了字节的副本,则可以实现更好的解决方案。因此具有单个实例odTesting并保留File f为“ className”的输入参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中的线程安全和代码同步

来自分类Dev

优化 Java Script 代码

来自分类Dev

PHP和Javascript。代码优化

来自分类Dev

PHP和Javascript。代码优化

来自分类Dev

JPA Criteria API NOT IN简化和优化代码

来自分类Dev

NodeJS:代码优化和变量作用域

来自分类Dev

什么是更好的SQL优化和DRY代码?

来自分类Dev

MatLab代码的速度和优化。如何提高?

来自分类Dev

优化python代码-分析和更改列表

来自分类Dev

优化包含for和if的C ++代码块

来自分类Dev

什么是更好的SQL优化和DRY代码?

来自分类Dev

MatLab代码的速度和优化。怎么提高?

来自分类Dev

JPA Criteria API NOT IN简化和优化代码

来自分类Dev

我如何优化此Java代码?

来自分类Dev

代码优化

来自分类Dev

Java安全性-RSA公钥和私钥代码发行

来自分类Dev

使用R中的for循环和/或函数优化和改进代码

来自分类Dev

异常安全代码和移动语义

来自分类Dev

是否有针对Java的循环任何优化线程安全?

来自分类Dev

使用ng-repeat和ng-if进行代码优化

来自分类Dev

序列化错误处理和代码优化

来自分类Dev

如何优化此代码以检查重复项和缺失值?

来自分类Dev

Django:如何以Django方式优化和减少重复代码?

来自分类Dev

jQuery单行代码优化,以获取和设置相同的输入元素

来自分类Dev

Java队列和线程安全

来自分类Dev

Java 静态和线程安全

来自分类Dev

Java Guessing游戏-优化和提示

来自分类Dev

如何优化我的Java代码以使用Java 7开关?

来自分类Dev

在Java中安全运行javascript代码