I'm trying to build a java.net application where client and server have to send data to each other via serialised collection types as byte[]
.
For an unknown reason my DataInputStream can't resolve the method readAllBytes()
.
A friend threw it in his IDE and it didn't complain. I'm unsure how this could be a version issue, but I checked and I didn't misconfigure my project. I'm using Java 8.
public void startClient() {
try {
Socket client = new Socket("localhost", 7000);
DataOutputStream out = new DataOutputStream(client.getOutputStream());
out.writeUTF("Hi i'm " + client.getLocalSocketAddress());
DataInputStream input = new DataInputStream(client.getInputStream());
byte[] sent = input.readAllBytes(); //"can't resolve method 'readAllBytes()'
getDataFromClient(input.readAllByes());//"can't resolve method 'readAllBytes()'
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
I'm actually sure this method should be supported, but I can't figure out why it isn't since it is listed as a method, inherited from Input Stream (docs.oracle.com).
The project, containing the method is also a Gradle Project. Hence, to complete the picture, this is the build.gradle:
plugins {
id 'java'
id 'application'
}
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.fxml","**/*.png"]
}
}
}
group 'prog3'
version '0.1'
mainClassName='Client'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.1.0'
}
Edit: Turns out as per the answers, Java 8 was insufficient and I should have used Java 9. Classic RTFM question.
As per InputStream.readAllBytes()
method javadoc this method was introduced in Java 9.
Since:
9
It won't work when the code is compiled on lower Java version, in your case Java 8.