Paghahambing ng mga uri sa Java
Pinagmulan:
Theflashreads Sa post na ito, matututunan mo ang tungkol sa ilang uri ng mga pagpipilian sa paghahambing sa Java. Ang pinakakaraniwang paraan upang matukoy kung ang isang ibinigay na bagay ay
isang halimbawa ng isang partikular na klase, superclass, o interface ay ang paggamit ng binary
instanceof operator . Kabilang dito ang isang implicit null check at bumubuo ng isang compile-time na error kung ang mga uri ay hindi nakatali. Gayunpaman, hindi nito pinapayagan ang paggamit ng mga primitive at nangangailangan na malaman ang mga uri sa oras ng pag-compile.
Kung kailangan mo ng dynamic na runtime checking
Sa kasong ito, gamitin ang katumbas na boolean isInstance(Object obj) na pamamaraan sa
Class . Kasama rin dito ang null checking, ngunit pinapayagan ang mga primitives:
a instanceof B
null instanceof B
a.getClass().isInstance(b);
Class<T> type = b.getClass();
type.isInstance(a);
int x = 4;
Integer.class.isInstance(x);
Sinusuri ang pagiging tugma ng dalawang uri
Kung kailangan mong suriin ang subtype na relasyon, gamitin ang
boolean isAssignableFrom(Class<?> cls) na pamamaraan sa
Class . Makakatulong ito na mahuli
ang NullPointerException .
Class<?> aClass = CharSequence.class;
Class<?> bClass = String.class;
bClass.isAssignableFrom(aClass());
CharSequence[].class.isAssignableFrom(String[].class);
Integer[].class.isAssignableFrom(String[].class);
Pagtutugma ng Pattern (Java 14)
if(a instanceof B b) {
b.toString();
}
Mga espesyal na uri
enum Color { WHITE, GRAY, BLACK }
Color.class.isEnum();
Color.WHITE instanceof Enum;
String[].class.isArray();
Class<?> componentType = obj.getComponentType();
int.class.isPrimitive();
Java.io - I/O Operations sa Java
Source:
Medium Ang nilalaman ng artikulong ito ay tungkol sa mga operasyon ng I/O sa Java. Sa Android at Java application development, ang input/output (Java I/O) ay isa sa mga paksang kadalasang ginagamit, ngunit sa ilang kadahilanan ay bihirang banggitin. Gayunpaman, malawak ang saklaw ng aplikasyon nito: halimbawa, nagsasagawa kami ng mga operasyong I/O kapag nagko-convert ng bitmap na imahe sa JPEG na format o habang nagbabasa/nagsusulat ng regular na file. Ang Java package na java.io ay mayroong lahat ng kinakailangang klase na kinakailangan upang maisagawa ang mga operasyon ng I/O. Ang mga operasyong ito ay ginagawa gamit ang mga thread. Kaugnay nito, ang mga thread ay tumutulong sa pagsasagawa ng mga operasyon sa pagbasa o pagsulat. Halimbawa, ang pagsusulat ng mensahe sa isang file.
Mga uri ng batis
Mayroong dalawang uri ng mga thread sa Java:
- Byte Stream (byte stream)
- Stream ng Character
Byte stream
Ang isang Byte Stream ay ginagamit upang magbasa at magsulat ng isang byte ng data. Kabilang dito ang mga klase ng Java
InputStream at
OutputStream .
Tumutulong ang InputStream na magbasa ng data at tumutulong
ang OutputStream na magsulat ng data sa isang target (maaaring isang file).
Stream ng character
Ginagamit ang Character Stream upang basahin at isulat ang isang character ng data. Kabilang dito
ang mga klase ng Reader at
Writer Java . Upang maunawaan
ang Reader at
Writer , dapat mong maunawaan ang mga nagmula na klase tulad ng
InputStreamReader ,
FileReader ,
OutputStreamWriter ,
FileWriter at iba pa.
InputStream at OutputStream
Ang InputStream ay ginagamit upang basahin ang data mula sa isang pinagmulan (maaaring isang file). Hindi ito kapaki-pakinabang sa sarili nitong, ngunit mayroon itong ilang mga nagmula na klase tulad ng
FileInputStream ,
ByteArrayInputStream , at
ObjectInputStream . Ginagamit ang
OutputStream upang magsulat ng data sa isang target (maaaring isang file). Ang mga nagmula nitong klase ay
FileOutputStream ,
ByteArrayOutputStream , at
ObjectOutputStream .
class InputOutput {
data class Car(val name: String): java.io.Serializable
fun fileStream() {
val outputStream = FileOutputStream("kotlin.txt")
outputStream.write(1)
outputStream.write("hello".toByteArray())
val inputStream = FileInputStream("kotlin.txt")
println(inputStream.read())
val msg = String(inputStream.readBytes())
println(msg)
outputStream.close()
inputStream.close()
}
fun byteArrayStream() {
val outputStream = ByteArrayOutputStream()
outputStream.write(1)
outputStream.write("hello".toByteArray())
val readByteArray = outputStream.toByteArray()
val inputStream = ByteArrayInputStream(readByteArray)
println(inputStream.read())
val msg = String(inputStream.readBytes())
println(msg)
outputStream.close()
inputStream.close()
}
fun objectStream() {
val car = Car(name = "BMW")
val fileOutputStream = FileOutputStream("kotlin.txt")
val objOutputStream = ObjectOutputStream(fileOutputStream)
objOutputStream.writeObject(car)
val fileInputStream = FileInputStream("kotlin.txt")
val objInputStream = ObjectInputStream(fileInputStream)
val carObject = objInputStream.readObject() as Car
println(carObject.name)
fileOutputStream.close()
objOutputStream.close()
fileInputStream.close()
objInputStream.close()
}
fun bufferStream() {
val fileOutputStream = FileOutputStream("kotlin.txt")
val outputStream = BufferedOutputStream(fileOutputStream)
outputStream.write("hello".toByteArray())
outputStream.flush()
val fileInputStream = FileInputStream("kotlin.txt")
val inputStream = BufferedInputStream(fileInputStream)
val msg = String(inputStream.readBytes())
println(msg)
fileOutputStream.close()
fileInputStream.close()
}
}
Bukod sa mga stream sa itaas, mayroon din kaming
DataInputStream at
DataOutputStream . Ginagawa nila ang parehong gawain tulad ng ibang mga thread. Ang pagkakaiba ay ang
DataInput /
OutputStream ay pangunahing ginagamit para sa pagbabasa/pagsusulat ng mga primitive na uri, habang
ang ObjectInput /
OutputStream ay pangunahing ginagamit para sa mga bagay at iba pa.
Mga Mambabasa at Manunulat
Sa Java I/O, kung nagbabasa/nagsusulat tayo ng data sa mga stream, dapat muna nating i-convert ang mga ito sa bytes. Saka lamang natin ito mababasa o maisusulat sa mga stream. Awtomatikong ginagawa ito ng
InputStreamReader at
OutputStreamWriter .
class ReaderWriter {
fun readerWriter() {
val outputStream = FileOutputStream("kotlin.txt")
val writer = OutputStreamWriter(outputStream)
writer.write("Hello Kotlin")
writer.flush()
val inputStream = FileInputStream("kotlin.txt")
val reader = InputStreamReader(inputStream)
println(reader.readText())
}
}
Parallel read and write
Minsan kailangan namin ng suporta sa multithreading sa Streams. Sa madaling salita, gusto naming magbasa at magsulat sa mga stream mula sa magkahiwalay na mga thread. Para dito kailangan nating gumamit
ng PipedInput /
OutputStream .
fun pipedStream() {
val inputStream = PipedInputStream()
val outputStream = PipedOutputStream()
inputStream.connect(outputStream)
val writeThread = object : Thread() {
override fun run() {
try {
for (i in 0..100) {
outputStream.write(i)
println("Write : $i")
sleep(100)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
val readThread = object : Thread() {
override fun run() {
try {
for (i in 0..100) {
println("Read : ${inputStream.read()}")
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
writeThread.start()
readThread.start()
}
GO TO FULL VERSION