所以,我看着这个"枚举"类型,并且它种好像一个华而不实的数组/ArrayList/ List给我.它的用途究竟是什么?
我试图通过使用FileInputStream将文件读入数组,并且~800KB文件花了大约3秒来读入内存.然后我尝试了相同的代码,除了将FileInputStream包装到BufferedInputStream中,它花了大约76毫秒.为什么使用BufferedInputStream以字节逐字节读取文件,即使我仍在逐字节读取它?这是代码(代码的其余部分完全不相关).请注意,这是"快速"代码.如果你想要"慢"代码,你可以删除BufferedInputStream:
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(file));
int[] fileArr = new int[(int) file.length()];
for (int i = 0, temp = 0; (temp = is.read()) != -1; i++) {
fileArr[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
BufferedInputStream的速度提高了30多倍.远不止于此.那么,为什么会这样,并且可以使这个代码更有效(不使用任何外部库)?
假设我有这个非常简单的代码:
for(int i = 0; i < 10; i++) {
thread = new Thread(this);
thread.start();
}
Run Code Online (Sandbox Code Playgroud)
但是,在此代码中,线程显然一次启动10次,并且在前一个完成之前不会等待.在让线程再次启动之前,如何检查线程是否完成?
因此,您可能知道,如果您有一个文本字段并且向其添加了ActionListener,它将只收听Enter按钮的按键.但是,我想让我的ActionListener监听文本中的更改.所以基本上我有这个:
public static JPanel mainPanel() {
JPanel mainp = new JPanel();
JTextArea areap = new JTextArea("Some text in the textarea");
JTextField fieldp = new JTextField("Edit this");
areap.setEditable(false);
fieldp.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(//change in textfield, for instance a letterpress or space bar)
{
//Do this
}
}
});
mainp.add(areap);
mainp.add(fieldp);
return mainp;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过任何方式收听文本中的更改(如actionPerformed事件中记录的那样)?
可能重复:
模拟器如何工作以及它们是如何编写的?
我想尝试编写一个基本的gameboy模拟器,甚至是NES.我知道C的基础知识,而且我相当擅长Java,所以我知道编程的必要基础知识.但我不知道的是人们如何将所有数据处理成C程序并从中创建模拟器.我知道我应该从源头学习,但是很难看到一堆代码而不知道它们为什么存在以及它们应该做什么.如果我想学习如何编写这样的模拟器,我应该从哪里开始?
我搜索过互联网,但我发现不清楚的教程包含太多错误,我自己也没弄清楚.我该在哪里开始?
我在微软的Spider Solitaire上使用它来测试整个基本/静态指针.所以我得到了玩家使用的"移动"量的基本指针,并且作弊引擎告诉我它是"SpiderSolitaire.exe + B5F78".所以现在我不知道如何弄清楚SpiderSolitaire.exe的起始地址是什么(当然每次程序启动时这都会改变).如何找到SpiderSolitaire.exe的起始地址,以便我可以添加偏移量并获取"移动"值的实际地址(当然是用c ++)?
我正在模拟6502处理器,我差不多完成了(现在处于测试阶段)并且我正在使用来自nesdev站点的一些NES测试,它告诉我中断标志和未使用的第5个标志都是最初应该设置为1(即禁用中断),但为什么呢?我可以理解未使用的标志部分,因为它......很好......未使用,但我不明白中断标志.我试过在Google上搜索,有些网站确认它应该设置为1,但没有人解释这背后的原因.为什么中断应该从程序开始被阻止?
可能是一个不明确的问题,所以这里是代码和解释:
Document doc = Jsoup.parse(exampleHtmlData);
Elements certainLinks = doc.select("a[href=google.com/example/]");
Run Code Online (Sandbox Code Playgroud)
String exampleHtmlData包含来自特定站点的已解析HTML源.这个网站有很多链接指导用户谷歌.一些例子是:
http://google.com/example/hello
http://google.com/example/certaindir/anotherdir/something
http://google.com/anotherexample
Run Code Online (Sandbox Code Playgroud)
我想在doc.select函数的链接中提取包含google.com/example/的所有链接.我如何使用JSoup做到这一点?
所以我正在学习关于C的教程,因为他们使用malloc函数而且我的编译器(Visual Studio C++ 10.0)似乎没有用得很好.所以我完全按照说明操作,我可以编译C,除了在这个特定的代码中,它给了我一个错误(代码从教程网站获取):
#include <stdio.h>
#include <stdlib.h>
struct node {
int x;
struct node *next;
};
int main()
{
/* This won't change, or we would lose the list in memory */
struct node *root;
/* This will point to each node as it traverses the list */
struct node *conductor;
root = malloc( sizeof(struct node) );
root->next = 0;
root->x = 12;
conductor = root;
if ( conductor != 0 ) {
while ( conductor->next != 0)
{ …Run Code Online (Sandbox Code Playgroud) 我知道这是一个令人难以置信的模糊问题,对于程序员来说这可能不是一个好问题,因为这实际上是与硬件有关的事情,但我想一些程序集/机器代码会起到适合本网站的作用.
所以我想知道的是; 想象一下6502处理器.它有一些寄存器,一个指令集和对一定数量内存的访问.然后想象你有一些任意分辨率的液晶屏.如何确定此屏幕上显示的内容?如何确定哪个位置的像素被赋予哪种颜色?例如,屏幕是否始终显示6502累加器中的值的像素,x位置存储在寄存器x中,y位置存储在y中?或者它是否被每台机器解释不同?
有人写了一个JavaScript 6502仿真器,设备显示一个像素,其值在某个内存位置,起价为200美元.例如:
LDA #$08
STA $200
Run Code Online (Sandbox Code Playgroud)
将在位置x:0,y:0处显示粉红色像素.
LDA #$01
STA $205
Run Code Online (Sandbox Code Playgroud)
将在位置x:5,y:0处显示白色像素.
但是,如果您查看NES,它会有一个专用的PPU,它会在屏幕的某个区域显示某些具有特定值的像素.
那么它是怎样工作的?它是由每台机器(即Apple II,C64,NES)进行不同的解释,还是它的解释方式有某种一致性?
事实上,如果为Apple II编译的程序以某种方式在C64上执行会发生什么?机器应该能够阅读说明书,对吗?
java ×5
6502 ×2
c ×2
c++ ×2
emulation ×2
android ×1
assembly ×1
base-address ×1
cpu ×1
enums ×1
file-io ×1
flags ×1
gameboy ×1
html ×1
inputstream ×1
interrupt ×1
jsoup ×1
jtextfield ×1
loops ×1
low-level ×1
malloc ×1
memory ×1
nintendo ×1
parsing ×1
pixel ×1
process ×1
struct ×1
swing ×1
windows ×1