Java 生成在终端内存上写入的随机代码
免责声明:我知道链接代码的编写、优化和文档记录都非常糟糕,但我只是为了好玩而胡闹,在我意识到它看起来在做什么之前,我根本没有打算发布它 在屏幕截图中,您将看到我正在运行的代码的副本(也在下面复制)以及我得到的一些输出-这就是我发布此内容的原因。在下面的代码中,我以前没有意识到,但它似乎已经在我的工作目录中写入了“@”和“~”(当输出输出输出到终端时发生了这种情况,而不是如该特定命令所示写入文档)。在进一步的测试中,我最终让它在第二个终端窗口中显示的输入缓冲区(?)中写入了一堆乱七八糟的内容(这似乎是一个视觉故障,而不是写入输入缓冲区的文本,因为我可以直接在其上写入,按enter键将其视为一条空行) 有什么想法吗Java 生成在终端内存上写入的随机代码,java,Java,免责声明:我知道链接代码的编写、优化和文档记录都非常糟糕,但我只是为了好玩而胡闹,在我意识到它看起来在做什么之前,我根本没有打算发布它 在屏幕截图中,您将看到我正在运行的代码的副本(也在下面复制)以及我得到的一些输出-这就是我发布此内容的原因。在下面的代码中,我以前没有意识到,但它似乎已经在我的工作目录中写入了“@”和“~”(当输出输出输出到终端时发生了这种情况,而不是如该特定命令所示写入文档)。在进一步的测试中,我最终让它在第二个终端窗口中显示的输入缓冲区(?)中写入了一堆乱七八糟的内容(这似
//Prints out a bunch of random characters converted from binary (because why not)
//Originally intended just to convert binary to ASCII text but I got bored...
public class Test{
public static void main(String[] args){
String input = "";
//creates a bunch of random binary and writes it to input
for(int i = 0; i < 10000; i++){
for(int k = 0; k < 8; k++){
input += (int)(Math.random()*2);
}
input += " ";
}
//splits binary into 8 bit chunks
String[] eightBit = input.split(" ");
//binary -> int
for(String i : eightBit){
if(i.length() == 8){
int value = 0;
String[] oneBit = i.split("");
for(int k = 0; k < 8; k++){
if(oneBit[k].equals("1")){
switch(k){
case 0:
value+=128;
break;
case 1:
value+=64;
break;
case 2:
value+=32;
break;
case 3:
value+=16;
break;
case 4:
value+=8;
break;
case 5:
value+=4;
break;
case 6:
value+=2;
break;
case 7:
value+=1;
break;
default:
break;
}
}
}
//int -> char
System.out.print((char)value);
}
}
System.out.println();
}
}
//打印出一组从二进制转换而来的随机字符(因为为什么不打印)
//最初打算只是将二进制转换成ASCII文本,但我觉得很无聊。。。
公开课考试{
公共静态void main(字符串[]args){
字符串输入=”;
//创建一组随机二进制文件并将其写入输入
对于(int i=0;i<10000;i++){
对于(int k=0;k<8;k++){
输入+=(int)(Math.random()*2);
}
输入+=”;
}
//将二进制文件拆分为8位块
字符串[]eightBit=input.split(“”);
//二进制->整数
用于(字符串i:八位){
如果(i.长度()==8){
int值=0;
字符串[]一位=i.split(“”);
对于(int k=0;k<8;k++){
if(一位[k]。等于(“1”)){
开关(k){
案例0:
数值+=128;
打破
案例1:
数值+=64;
打破
案例2:
数值+=32;
打破
案例3:
数值+=16;
打破
案例4:
数值+=8;
打破
案例5:
数值+=4;
打破
案例6:
数值+=2;
打破
案例7:
数值+=1;
打破
违约:
打破
}
}
}
//int->char
系统输出打印((字符)值);
}
}
System.out.println();
}
}
我自己的测试输出如下:
编辑:是的。这只是一个复杂的噪音发生器,我在发布之前没有简化它。我的问题是,为什么产生随机噪声会导致写入终端/输入缓冲区中使用的内存。下面是噪声发生器的简化版本(它与二进制->噪声版本具有相同的感知效果)
公共类TestSimp{
公共静态void main(字符串[]args){
对于(int i=0;i<10000;i++){
系统输出打印((char)((int)(Math.random()*256));
}
System.out.println();
}
}
EDIT2:我继续测试,并在搜索写入输入缓冲区的内容时得到。在随机产生的噪音中似乎没有其他地方,这似乎很奇怪
以下是我用来生成该输出的代码(我必须按enter键尝试几次,直到获得链接输出):
import java.util.Scanner;
公共类TestSimp{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
字符串inputBuffer=“”;
做{
对于(int i=0;i<10000;i++){
系统输出打印((char)((int)(Math.random()*256));
}
System.out.println();
inputBuffer=in.nextLine();
}while(inputBuffer.equals(“”);
System.out.println(“--INPUT BUFFER--”);
System.out.println(输入缓冲区);
}
}
您正在标准输出上打印随机噪声。其中一些噪音肯定是会弄乱终端的控制字符。为什么代码中需要字符串<代码>值似乎只是一个介于0和255之间的随机整数。有很多不必要的转换和字符串拆分,我不确定它们是否添加了任何内容。@codebod作为评论和本文的标题都提到过,这只是我在胡闹。最初的项目仅仅是转换二进制->整数->ascii字符,但我对此感到厌倦,这就是为什么我创建了一个随机化器,但是是的,OP中的编辑应该是透明的。@FedericoklezCulloca我想这也是原因,我很好奇,到底是什么ASCII字符/组合允许终端中的随机输出在运行时写入其他地方使用的内存位置/输入缓冲区。我没有看到任何证据表明有任何东西是“写入其他地方使用的内存位置”。我所看到的只是向终端发送随机数据(包括随机控制码)的结果。如果你开始cat
ing随机二进制文件,你会得到类似的损坏。你在标准输出上打印随机噪声。其中一些噪音肯定是会弄乱终端的控制字符。为什么代码中需要字符串<代码>值似乎只是一个介于0和0之间的随机整数
public class TestSimp{
public static void main(String[] args){
for(int i = 0; i < 10000; i++){
System.out.print((char)((int)(Math.random()*256)));
}
System.out.println();
}
}
import java.util.Scanner;
public class TestSimp{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String inputBuffer = "";
do{
for(int i = 0; i < 10000; i++){
System.out.print((char)((int)(Math.random()*256)));
}
System.out.println();
inputBuffer = in.nextLine();
} while(inputBuffer.equals(""));
System.out.println("--- INPUT BUFFER ---");
System.out.println(inputBuffer);
}
}