gpt4 book ai didi

java - 为什么我制作的 Basic Java Hex Editor 会卡住大约 2MB 大小或更大的文件?

转载 作者:行者123 更新时间:2023-11-30 11:57:17 25 4
gpt4 key购买 nike

好吧,我正在用 Java 编写一个十六进制编辑器,当我加载一个大约 2MB 或更大的文件时,它就卡住了。虽然没有出现错误,所以我不确定发生了什么。谁能帮我?这是代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import java.util.Vector;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class HexEditor extends JFrame{
JScrollPane hexScroll;
JScrollPane byteScroll;
JPanel panel;
JTextArea hexArea;
JTextArea byteArea;
JFileChooser chooser;// = new JFileChooser();
FileInputStream fin;
JMenuBar menuBar;
JMenu file;
JMenuItem load;

public HexEditor(){
super("Cypri's java hex editor");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

chooser = new JFileChooser();

load = new JMenuItem("Load");
load.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {

try{

openFile();
fin = new FileInputStream(chooser.getSelectedFile());

int ch;
StringBuffer strContent = new StringBuffer("");

for(int i = 0; (ch = fin.read()) != -1; i++){
String s = Integer.toHexString(ch);

if(s.length() < 2)
s = "0" + Integer.toHexString(ch);

if(i < 10)
strContent.append(" " + s.toUpperCase());

else{
strContent.append(" " + s.toUpperCase() + "\n");
i = 0;
}
}

hexArea.setText(strContent.toString());

byte[] b = hexStringToByteArray(strContent.toString().trim());
char[] chars = new char[b.length];
String byteText = "";
int newLine = 0;
for(int i = 0; i < b.length; i++){
chars[i] = (char) b[i];
byteText += chars[i];

newLine++;
if(newLine > 10){
byteText += "\n";
newLine = 0;
}
}

hexArea.setText(strContent.toString());
byteArea.setText(byteText);
packMe();
}

catch(Exception e){
e.printStackTrace();
}
}
});

file = new JMenu("File");
file.add(load);

menuBar = new JMenuBar();

menuBar.add(file);

hexArea = new JTextArea();
byteArea = new JTextArea();

hexScroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
byteScroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

panel = new JPanel();

panel.add(hexScroll);
panel.add(byteScroll);
hexScroll.setViewportView(hexArea);
byteScroll.setViewportView(byteArea);

hexArea.setPreferredSize(new Dimension(200,200));
byteArea.setPreferredSize(new Dimension(200,200));

hexScroll.setPreferredSize(new Dimension(200,200));
byteScroll.setPreferredSize(new Dimension(200,200));

getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.NORTH, menuBar);
getContentPane().add(BorderLayout.CENTER, panel);
pack();
setVisible(true);
}

public static byte[] hexStringToByteArray(String s) {
int len = s.length() -1;
byte[] data = new byte[(len / 2) + 1];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
}
return data;
}


public void openFile(){
chooser.showOpenDialog(null);
}

public void packMe(){
pack();
}

public static void main(String[] args){
HexEditor app = new HexEditor();
}
}

最佳答案

2MB 就已经是一个大字符串了。您需要将文件分成页面进行显示,并且一次只转换几 KB 的缓冲区。

关于java - 为什么我制作的 Basic Java Hex Editor 会卡住大约 2MB 大小或更大的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com