Java: Byte-Array per for-Schleife schicken?

2 Antworten

Nach dem empfangen der Länge schreibst du

inS.close();

Das schließt den Socket, sodass er danach nicht mehr verwendbar ist. Wenn du das weglässt und den Socket erst nach dem Empfangen der Arrays schließt, sollte es funktionieren.

Übrigens wäre der Code 1000 mal leichter zu lesen, wenn du nicht alles in eine Zeile schreibst, sondern wie üblich eine Zeile pro Statement verwendest.

4

das der Code in einer zeile steht liegt an gutefrage ich hab den so natürlich nicht geschirben :)

nachdem ich die änderung duchgenomen hab bekomme ich jetzt die meldung

java.io.EOFException

   at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)

   at java.io.ObjectInputStream.readObject0(Unknown Source)

   at java.io.ObjectInputStream.readObject(Unknown Source)

   at sendTest.inWirter.run(inWirter.java:52)

   at java.lang.Thread.run(Unknown Source)

0
36
@Fabsi102938

EOF steht für End Of File. Kann es sein, dass du mehr Elemente empfängst, also du sendest?

Ich werde den Code mal selbst testen.

1
4
@VeryBestAnswers

nein eigentlich nicht aber mir ist grade was aufgefallen und zwar wenn ich das erstemal auf den server mit dem Client verbinde bekomme ich den error, aber wenn ich mich das 2 mal verbinde und den Server laufen lasse geht es. WARUM?

0
36
@Fabsi102938

Anscheinend ist es keine gute Idee, einen BufferedReader und einen ObjectInputStream vom gleichen Socket zusammen zu verwenden.

Hier mein Vorschlag: Du willst Werte und Objekte über den Socket übertragen, also entscheide dich für eines von beiden. Ich rate zu ObjectInputStream, denn damit kannst du alles übertragen, einschließlich, Zahlen, Strings, Arrays und andere Objekte. Ich habe das ausprobiert, es funktioniert problemlos.

So überträgst du die Länge vom Array:

ous.writeObject(p.Final_Filebyte.length);

So empfängst du sie:

int leng = (int) ois.readObject();

Die Arrays kannst du übertragen wie gehabt, allerdings dürftest du auch das 2D-Array auf einmal übertragen können, das spart Arbeit.

Du kannst auch ein Objekt einer selbst definierten Klasse übertragen, wenn du sie Serializable machst:

public class Message implements Serializable {
    byte[][] data;
}

Diese Klasse lässt sich jetzt genauso wie Arrays oder Zahlen im ObjectInputStream lesen und schreiben.

1

Die Übergabe der Anzahl der Arrays ist unnötig. Arrays sind in Java Objekte, sodass Du diese direkt in den ObjectOutputStream schieben kannst.

Die andere Seite, die die Daten empfängt, kann dann über den ObjectInputStream die einzelnen Objekte abfragen. Wenn der Zeiger im Stream am Ende angekommen ist, dann gibt es halt keine Objekte mehr.

Insofern bauchst Du keine Länge separat mit übergeben.

Wenn du komplexere Daten über den Socket schieben willst, würde ich dir dafür eine eigene Klasse empfehlen. Diese sollte Serializable implementieren. In der Klasse werden alle Daten hinterlegt.

Woher ich das weiß:
Studium / Ausbildung

mehrere Zeilen in eine Datei schreiben java

Hallo,

Ich hab da mal eine frage und zwar hab ich ein quelltext(siehe unten) und mit diesen quelltext kann ich wunderbar jede einzelne Zeile auslesen aber ich krieg es nicht hin das ich durch diesen Quelltext die einzelnen Zeilen die ich auslese wider in eine andere Datei zu schreiben.

Um es kurz zu machen: Dieser Programm abschnitt soll zuerst eine Datei zeilenweisse auslesen und danach in eine andere Datei schreiben.

Hier ist code:

try{
                  BufferedReader in = new BufferedReader(new FileReader("Toodoo.txt"));
                  String str;
                  while((str = in.readLine()) != null) {
                    System.out.println(str);
                    
                    PrintWriter pWriter = null; 
                    try { 
                        String h;
                        pWriter = new PrintWriter(new BufferedWriter(new FileWriter("test.txt"))); 
                       
                        pWriter.println(str); 
                        labe.setText(str);
                    } catch (IOException ioe) { 
                        ioe.printStackTrace(); 
                    } finally { 
                        if (pWriter != null){ 
                            pWriter.flush(); 
                            pWriter.close(); 
                        } 
                    } 
                }
                }
...zur Frage

Elemente in Arrays (java) einfügen?

 Hallo! Hier habe ich ein bisschen mit Arrays rumgespielt. Es soll eine 0 in das kopierte Array vor der jeweiligen Zahl eingesetzt werden, wenn diese kleiner als 10 ist. Wenn die Zahl größer als 10 ist, dann wird eine 1 vor die jeweilige Zahl gesetzt.

Wäre so ein Lösungsansatz akzeptabel oder haben sich Fehler eingeschlichen?

Muss dazu sagen, dass ich ein Anfänger bin :)

Danke im Vorraus!

Der Code lautet:

public class Array {
    public static void main (String[] args){
       Array arrayListe = new Array();
       int[] liste = {5, 20, -9};
       int[] rueckgabe = Array.veraendereArray[liste];
       for(int element : rueckgabe){
       System.out.println(element);
    }
 }
public static int [] veraendereArray(int[] liste){
   int[] rueckgabe = new int[liste.length+4];
   for(int i = 0; i <= liste.length; i++){
      if(element <10){
         rueckgabe[i+1]=0;
      }
      else{
         rueckgabe[i+1] =1;
      }
   }
}
 }
...zur Frage

Hilfe! Minecraft server erstellen geht nicht, was mache ich falsch?

Hallo, ich versuche schon seit längerem einen Minecraft-Server zu erstellen, aber es geht irgendwie nicht, ich glaube, dass ich einen Schritt vergesse. So sieht das aus bei mir:

15:11:40 INFO]: Starting minecraft server version 1.8.1 [15:11:40 WARN]: To start the server with more ram, launch it as "java -Xmx1024M -Xms1024M -jar minecraft_server.jar" [15:11:40 INFO]: Loading properties [15:11:40 ERROR]: Exception handling console input java.io.IOException: Das Handle ist ungültig at java.io.FileInputStream.readBytes(Native Method) ~[?:1.7.0_67] at java.io.FileInputStream.read(Unknown Source) ~[?:1.7.0_67] at java.io.BufferedInputStream.read1(Unknown Source) ~[?:1.7.0_67] at java.io.BufferedInputStream.read(Unknown Source) ~[?:1.7.0_67] at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) ~[?:1.7.0_67] at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.7.0_67] at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.7.0_67] at java.io.InputStreamReader.read(Unknown Source) ~[?:1.7.0_67] at java.io.BufferedReader.fill(Unknown Source) ~[?:1.7.0_67] at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_67] at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_67] at pr.run(SourceFile:81) [minecraft_server.1.8.1.jar:?] [15:11:40 WARN]: server.properties does not exist [15:11:41 INFO]: Generating new properties file [15:11:41 WARN]: Failed to save server.properties java.io.FileNotFoundException: server.properties (Zugriff verweigert)

Und so weiter.... Am ende kommt dann die ganze Zeit:

[15:40:16 INFO]: Generating new properties file [15:40:28 INFO]: Generating new properties file [15:40:35 INFO]: Generating new properties file [15:40:42 INFO]: Generating new properties file [15:40:49 INFO]: Generating new properties file [15:40:58 INFO]: Generating new properties file [15:41:08 INFO]: Generating new properties file [15:41:32 INFO]: Generating new properties file [15:41:37 INFO]: Generating new properties file [15:42:52 INFO]: Generating new properties file [15:43:48 INFO]: Generating new properties file [15:44:49 INFO]: Generating new properties file [15:45:09 INFO]: Generating new properties file [15:45:56 INFO]: Generating new properties file [15:46:33 INFO]: Generating new properties file [15:47:20 INFO]: Generating new properties file

Ich hoffe, ihr könnt mir helfen... Danke schon mal im Vorraus :) LG

...zur Frage

Nitrado FTB-Infinity Server Problem

Hey Ho Minecraft Freunde, (Sorry das musste sein :D)

Wir haben ein Server Problem.

Und zwar wollten wir den Server heute von der 1.2.1 Infinity Version auf 1.3.4 upgraden, doch irgendwas hindert und scheinbar daran.

Immer wenn wir versuchen den Server neuzustarten bzw. allgemein zu starten, steht da ein Error, der lautet:

[18:42:13] [Server thread/INFO]: Starting minecraft server version 1.7.10 [18:43:48] [Server thread/INFO]: Loading properties [18:43:48] [Server thread/INFO]: Default game type: SURVIVAL [18:43:48] [Server thread/INFO]: Generating keypair [18:43:48] [Server thread/INFO]: Starting Minecraft server on 134.255.208.109:25565 [18:44:53] [Server thread/INFO]: Preparing level "world" [18:44:57] [Server console handler/ERROR]: Exception handling console input java.io.IOException: Input/output error at java.io.FileInputStream.readBytes(Native Method) ~[?:1.7.0_71] at java.io.FileInputStream.read(Unknown Source) ~[?:1.7.0_71] at java.io.BufferedInputStream.read1(Unknown Source) ~[?:1.7.0_71] at java.io.BufferedInputStream.read(Unknown Source) ~[?:1.7.0_71] at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) ~[?:1.7.0_71] at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.7.0_71] at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.7.0_71] at java.io.InputStreamReader.read(Unknown Source) ~[?:1.7.0_71] at java.io.BufferedReader.fill(Unknown Source) ~[?:1.7.0_71] at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_71] at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_71] at net.minecraft.server.dedicated.DedicatedServer$2.run(DedicatedServer.java:97) [lv.class:?]

Weiß jemand was das bedeutet und hat jemand ähnliche Probleme oder Lösungen?

...zur Frage

Im Array nach einer bestimmten Zahl suchen brauche hilfe?

import java.util.Scanner; 

public class Felder
{
public static void main(String[] args)
{
// Beschreibung des Programms

System.out.println("Erstellung eines Arrays mit n-Feldern");
System.out.println();


//Scanner zur Einagbe der Feldgröße

Scanner sc = new Scanner(System.in);

System.out.print("Bitte geben sie die Größe des Arrays ein ");
int feldgroesse = sc.nextInt();


int[] a = new int[feldgroesse];

System.out.println("Nun füllen Sie das Array mit ganzen Zahlen");
System.out.println();


// Schleife zum füllen des Arrays

for (int i=0; i<feldgroesse;i++)
{
System.out.print("Bitte geben Sie eine Ganzzahl ein: ");
a[i] = sc.nextInt();
}

for (int i; i = 0; i++)
{
if(a[i] = = 5)
{
System out println(„Der Array enthält die gesuchte Zahl: “ + a[i]);
}
}
printFeld(a);
sc.close();
}

public static void printFeld(int[] a)
{

//gibt das Arrays auf der Konsole aus
System.out.println();
System.out.println("Ausgabe des Arrays");
System.out.println();
for (int i=0; i<a.length;i++)
{
System.out.println("Feld "+ i + " = " +a[i]);
}
}
}

Komme nicht weiter bitte mit einer code Antwort helfen hänge seit 3 Tagen an dieser Aufgabe. Danke Eine eigene Methode schreiben(suchIndex(int[] a, int wert)) die eine vom Nutzer abgefragte Zahl im zuvor erstellten Array sucht und wenn es gefunden wird mit dem entsprechenden Index ausgibt

...zur Frage

Bei Meinem Minecraft-modpack crasht es immer,unten steht der Crashreport?

---- Minecraft Crash Report ---- // Don't be sad. I'll do better next time, I promise!

Time: 8/10/15 7:54 PM Description: Updating screen events

java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) at java.lang.AbstractStringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at java.lang.StackTraceElement.toString(Unknown Source) at java.lang.String.valueOf(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at org.apache.logging.log4j.core.impl.ThrowableProxy.formatEntry(ThrowableProxy.java:304) at org.apache.logging.log4j.core.impl.ThrowableProxy.formatElements(ThrowableProxy.java:269) at org.apache.logging.log4j.core.impl.ThrowableProxy.formatCause(ThrowableProxy.java:258) at org.apache.logging.log4j.core.impl.ThrowableProxy.getExtendedStackTrace(ThrowableProxy.java:234) at org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter.format(ExtendedThrowablePatternConverter.java:72) at org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:36) at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:167) at org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:52) at org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(AbstractStringLayout.java:45) at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:111) at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:99) at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:425) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:367) at org.apache.logging.log4j.core.Logger.log(Logger.java:110) at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1039) at net.minecraft.client.Minecraft.func_110436_a(Unknown Source) at net.minecraft.client.gui.GuiScreenResourcePacks.func_146284_a(SourceFile:151) at net.minecraft.client.gui.GuiScreen.func_73864_a(GuiScreen.java:225) at net.minecraft.client.gui.GuiScreenResourcePacks.func_73864_a(SourceFile:158) at net.minecraft.client.gui.GuiScreen.func_146274_d(GuiScreen.java:296) at net.minecraft.client.gui.GuiScreen.func_146269_k(GuiScreen.java:268) at net.minecraft.client.Minecraft.func_71407_l(Unknown Source) at net.minecraft.client.Minecraft.func_71411_J(Unknown Source)

A detailed walkthrough of the error, its code path and all known details is as follows:

-- Head -- Stacktrace: at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.

...zur Frage

Was möchtest Du wissen?