diff --git a/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoader.java b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoaderTmp.java similarity index 97% rename from group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoader.java rename to group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoaderTmp.java index 0961c5ddd5..340f6599c6 100644 --- a/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoader.java +++ b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/ClassFileLoaderTmp.java @@ -7,7 +7,7 @@ import java.util.ArrayList; import java.util.List; -public class ClassFileLoader { +public class ClassFileLoaderTmp { private List clzPaths = new ArrayList(); int countForClassPath = 0; int countForReadBinaryCode = 0; diff --git a/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/EmployeeV1.java b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/EmployeeV1.java new file mode 100644 index 0000000000..92b5b403ca --- /dev/null +++ b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/EmployeeV1.java @@ -0,0 +1,31 @@ +package com.pan.jvm; + +public class EmployeeV1 { + + + private String name; + private int age; + + public EmployeeV1(String name, int age) { + this.name = name; + this.age = age; + } + + public void setName(String name) { + this.name = name; + } + + public void setAge(int age) { + this.age = age; + } + + public void sayHello() { + System.out.println("Hello , this is class Employee "); + } + + public static void main(String[] args) { + EmployeeV1 p = new EmployeeV1("Andy", 29); + p.sayHello(); + + } +} \ No newline at end of file diff --git a/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/loader/ClassFileLoader.java b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/loader/ClassFileLoader.java index a21d246399..c1d0553522 100644 --- a/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/loader/ClassFileLoader.java +++ b/group11/252308879/mini-jvm/src/main/java/com/pan/jvm/loader/ClassFileLoader.java @@ -18,31 +18,21 @@ public class ClassFileLoader { private List clzPaths = new ArrayList(); public byte[] readBinaryCode(String className) { - className = className.replace('.', File.separatorChar) + ".class"; - for (String path : this.clzPaths) { - String clzFileName = path + File.separatorChar + className; byte[] codes = loadClassFile(clzFileName); if (codes != null) { return codes; } } - return null; - - } private byte[] loadClassFile(String clzFileName) { - File f = new File(clzFileName); - try { - return IOUtils.toByteArray(new FileInputStream(f)); - } catch (IOException e) { e.printStackTrace(); return null; @@ -54,9 +44,7 @@ public void addClassPath(String path) { if (this.clzPaths.contains(path)) { return; } - this.clzPaths.add(path); - } @@ -74,7 +62,6 @@ public ClassFile loadClass(String className) { // ------------------------------backup------------------------ public String getClassPath_V1() { - StringBuffer buffer = new StringBuffer(); for (int i = 0; i < this.clzPaths.size(); i++) { buffer.append(this.clzPaths.get(i)); @@ -88,31 +75,19 @@ public String getClassPath_V1() { private byte[] loadClassFile_V1(String clzFileName) { BufferedInputStream bis = null; - try { - File f = new File(clzFileName); - - bis = new BufferedInputStream(new FileInputStream(f)); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - byte[] buffer = new byte[1024]; int length = -1; - while ((length = bis.read(buffer)) != -1) { bos.write(buffer, 0, length); } - byte[] codes = bos.toByteArray(); - return codes; - } catch (IOException e) { e.printStackTrace(); - } finally { if (bis != null) { try { @@ -123,7 +98,6 @@ private byte[] loadClassFile_V1(String clzFileName) { } } return null; - } diff --git a/group11/252308879/mini-jvm/src/test/java/com/pan/alg/LRUPageFrameTest.java b/group11/252308879/mini-jvm/src/test/java/com/pan/alg/LRUPageFrameTest.java new file mode 100644 index 0000000000..8f6803c11f --- /dev/null +++ b/group11/252308879/mini-jvm/src/test/java/com/pan/alg/LRUPageFrameTest.java @@ -0,0 +1,34 @@ +package com.pan.alg; + +import org.junit.Assert; + +import org.junit.Test; + + +public class LRUPageFrameTest { + + @Test + public void testAccess() { + LRUPageFrame frame = new LRUPageFrame(3); + frame.access(7); + frame.access(0); + frame.access(1); + Assert.assertEquals("1,0,7", frame.toString()); + frame.access(2); + Assert.assertEquals("2,1,0", frame.toString()); + frame.access(0); + Assert.assertEquals("0,2,1", frame.toString()); + frame.access(0); + Assert.assertEquals("0,2,1", frame.toString()); + frame.access(3); + Assert.assertEquals("3,0,2", frame.toString()); + frame.access(0); + Assert.assertEquals("0,3,2", frame.toString()); + frame.access(4); + Assert.assertEquals("4,0,3", frame.toString()); + frame.access(5); + Assert.assertEquals("5,4,0", frame.toString()); + + } + +} diff --git a/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/EmployeeV1.java b/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/EmployeeV1.java new file mode 100644 index 0000000000..92b5b403ca --- /dev/null +++ b/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/EmployeeV1.java @@ -0,0 +1,31 @@ +package com.pan.jvm; + +public class EmployeeV1 { + + + private String name; + private int age; + + public EmployeeV1(String name, int age) { + this.name = name; + this.age = age; + } + + public void setName(String name) { + this.name = name; + } + + public void setAge(int age) { + this.age = age; + } + + public void sayHello() { + System.out.println("Hello , this is class Employee "); + } + + public static void main(String[] args) { + EmployeeV1 p = new EmployeeV1("Andy", 29); + p.sayHello(); + + } +} \ No newline at end of file diff --git a/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/TestReadCFBB.java b/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/TestReadCFBB.java index 5523fa7696..8590e78c09 100644 --- a/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/TestReadCFBB.java +++ b/group11/252308879/mini-jvm/src/test/java/com/pan/jvm/TestReadCFBB.java @@ -1,10 +1,41 @@ package com.pan.jvm; +import com.pan.jvm.loader.ClassFileLoader; +import org.junit.Test; + +import java.io.IOException; + /** * 用于测试第一次JVM作业,读取.class作业 和 魔幻数字 */ public class TestReadCFBB { + @Test + public void testClassPath(){ + ClassFileLoader classFileLoader = new ClassFileLoader(); + String path = ClassFileLoader.class.getClassLoader().getResource("").getPath(); + path = path.replace("test-classes", "classes"); + classFileLoader.addClassPath(path); + classFileLoader.addClassPath("d://tmp"); + + String clzPath = classFileLoader.getClassPath(); + System.out.println(clzPath); + } + + + + @Test + public void testReadCFBB() throws IOException { + ClassFileLoader classFileLoader = new ClassFileLoader(); + String path = ClassFileLoader.class.getClassLoader().getResource("").getPath(); + path = path.replace("test-classes", "classes"); + classFileLoader.addClassPath(path); + byte[] bytes = classFileLoader.readBinaryCode("com.pan.jvm.loader.ClassFileLoader"); + for (byte b : bytes) { + String toHexString = Integer.toHexString(b & 0xFF).toUpperCase(); + System.out.print(toHexString + " "); + } + } }