我必须按字符读取53 MB的文件.当我使用ifstream在C++中完成它时,它在几毫秒内完成,但使用Java InputStream需要几分钟.Java很慢或者我错过了什么是正常的吗?
另外,我需要用Java完成程序(它使用servlet,我必须从中调用处理这些字符的函数).我想也许用C或C++编写文件处理部分,然后用Java Native Interface将这些函数与我的Java程序连接......这个想法怎么样?
任何人都可以给我任何其他提示......我真的需要更快地阅读文件.我尝试使用缓冲输入,但它仍然没有提供甚至接近C++的性能.
编辑:我的代码跨越几个文件,它非常脏,所以我给出了概要
import java.io.*;
public class tmp {
public static void main(String args[]) {
try{
InputStream file = new BufferedInputStream(new FileInputStream("1.2.fasta"));
char ch;
while(file.available()!=0) {
ch = (char)file.read();
/* Do processing */
}
System.out.println("DONE");
file.close();
}catch(Exception e){}
}
}
Run Code Online (Sandbox Code Playgroud) 我不知道是否有办法ping我的局域网代理之外的目标只通过squid代理接受Http请求...我在某处读到了处理这种问题的一种方法是使用一个http隧道,以便代理仍将请求视为Http请求.我可以使用它来ping,例如www.google.com,否则会出现以下错误,因为防火墙拒绝了请求:
$ ping www.google.com
ping: unknown host www.google.com
Run Code Online (Sandbox Code Playgroud)
如果是这样,它是如何完成的?
我已经安装了httptunnel.Any帮助如何使用它将非常感激.
根据Unix网络编程Vol1,"收到的UDP数据包和收到的TCP数据包永远不会传递给原始套接字.如果进程想要读取包含UDP或TCP数据包的IP数据报,则必须在数据链路层读取数据包"...
但与此相反,在创建原始套接字时有一个IPPROTO_TCP协议选项,在我看来这是用于这个目的.任何人都可以指出我在理解这个问题时可能犯的任何错误吗?
引导加载程序无论如何都会在该地址加载它?为什么要在程序中指定这个?
main()
{
char i=255;
printf("\n%x\n",i);
}
Run Code Online (Sandbox Code Playgroud)
输出:ffffffff
main()
{
u_char i=255;
printf("\n%x\n",i);
}
Run Code Online (Sandbox Code Playgroud)
输出:ff
这里发生了什么?请通过一些好的链接向我解释输出.这是我猜的一个非常基本的事情,我真的很困惑......
当我尝试ping我的LAN上的广播地址时,它每次只显示来自3个主机的ICMP回复,即使有许多主机连接到LAN.
对于广播地址,我做到了
$ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:1b:38:09:0b:26
inet addr:172.30.120.152 Bcast:172.30.127.255 Mask:255.255.248.0
inet6 addr: fe80::21b:38ff:fe09:b26/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:831096 errors:0 dropped:0 overruns:0 frame:0
TX packets:13022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66620362 (66.6 MB) TX bytes:3099025 (3.0 MB)
Interrupt:21 Base address:0x2000
Run Code Online (Sandbox Code Playgroud)
我使用Bcast addr 172.30.127.255来ping每个人......
$ping -b 172.30.127.255
WARNING: pinging broadcast address
PING 172.30.127.255 (172.30.127.255) 56(84) bytes of data.
64 bytes from 172.30.120.1: icmp_seq=1 ttl=255 time=0.809 ms
64 bytes from 172.30.120.62: icmp_seq=1 ttl=64 time=1.06 …
Run Code Online (Sandbox Code Playgroud) 我正在研究原始套接字.我使用IP_HDRINCL选项来构建自己的IP头.在IP标头之后,我正在构建UDP标头.然后我将数据包发送到我系统的环回地址.我有另一个程序正在运行,它将捕获UDP数据包.为了检查数据包是否正确形成和接收,我正在运行另一个正在读取原始IP数据报的进程.我的问题是虽然第二个进程(读取原始数据报)运行良好(所有IP和UDP字段似乎都没问题),但第一个进程(接收UDP)没有收到我创建的任何数据包.IP头中的协议字段是可以的,端口也匹配...我正在使用Linux 2.6.35-22.我想知道新内核中这是否正常?请检查下面的代码是否有任何错误.应该接收数据包的UDP进程正在侦听绑定到同一台机器上的端口50000的套接字...
unsigned short in_cksum(unsigned short *addr, int len)
{
int nleft = len;
int sum = 0;
unsigned short *w = addr;
unsigned short answer = 0;
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
if (nleft == 1) {
*(unsigned char *) (&answer) = *(unsigned char *) w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xFFFF);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}
main()
{ …
Run Code Online (Sandbox Code Playgroud) 我说的是英特尔32位平台.Linux内核版本2.6.31-14.
#include <stdio.h>
#include <stdlib.h>
int init_global_var = 10; /* Initialized global variable */
int global_var; /* Uninitialized global variable */
static int init_static_var = 20; /* Initialized static variable in global scope */
static int static_var; /* Uninitialized static variable in global scope */
int main(int argc, char **argv, char **envp)
{
static int init_static_local_var = 30; /* Initialized static local variable */
static int static_local_var; /* Uninitialized static local variable */
int init_local_var = 40; /* Initialized local …
Run Code Online (Sandbox Code Playgroud) 路由器如何知道哪个是发送数据包的最佳线路.我的意思是,路由表通常不包含IP数据包的目标网络号的条目.它只知道它附近或附近的目的地.它不知道地址是否存在.假设我向我的LAN代理请求stackoverflow.com.接下来,它将请求发送到路由器.如何使用最佳路径将数据包一直传输到美国的服务器,看到该路由器只知道附近的地址?先感谢您...
.model tiny
.code
org 100h
host:
mov ah,9
mov dx,offset hi
int 21h
mov ax,4c00h
int 21h
hi db 'HELLO'
end host
Run Code Online (Sandbox Code Playgroud)
c:masm hello.asm
输出的结果表示预期在第1行上的操作数。请告诉我如何使用此版本的masm生成com文件...
由于仅由内核使用,因此它们只能位于 PAGE_OFFSET 以上的地址中。但我正在阅读这一页,在其末尾(在 IRC 会议中)我读到了以下几行内容,这让我很困惑:
saxm> riel: so where do page tables reside? Surely not below PAGE_OFFSET? Somewhere above PAGE_OFFSET+896mb then?
riel> they could reside anywhere
saxm> anywhere from 0->4gb (on x86 with no pae)?
riel> saxm: yeah
Run Code Online (Sandbox Code Playgroud)
我的意思是,为什么它们会位于 PAGE_OFFSET 下面?如果是这种情况,用户空间进程是否无法访问它们?
我一直在阅读"Shellcoders手册",并指的是这个链接,用于实现堆栈溢出.但似乎Linux内核开发人员已经使内核非常安全.这是我的问题.
1)这段代码
void function(int a, int b, int c) {
char buffer1[8];
char buffer2[10];
int* ret;
ret = buffer1 + 6;
*ret+=8;
}
void main() {
int x;
x = 0;
function(1,2,3);
x = 1;
printf("%d\n",x);
}
Run Code Online (Sandbox Code Playgroud)
给出输出
$ cc smash.c
smash.c: In function ‘function’:
smash.c:7:8: warning: assignment from incompatible pointer type
$ ./a.out
1
Run Code Online (Sandbox Code Playgroud)
用的线*ret+=8
与*ret=8
给出以下输出
*** stack smashing detected ***: ./a.out terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0xa86df0]
/lib/i386-linux-gnu/libc.so.6(+0xe5d9a)[0xa86d9a]
./a.out[0x8048448]
./a.out[0x8048477]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x9b7e37]
./a.out[0x8048381]
======= Memory …
Run Code Online (Sandbox Code Playgroud) networking ×4
linux ×2
linux-kernel ×2
bootloader ×1
broadcast ×1
c ×1
entry-point ×1
gcc ×1
icmp ×1
inputstream ×1
java ×1
large-files ×1
masm ×1
ping ×1
process ×1
raw-sockets ×1
routing ×1
sockets ×1
stack ×1
tunneling ×1
udp ×1
unsigned ×1